Index: DESCRIPTION.txt ================================================================== --- DESCRIPTION.txt +++ DESCRIPTION.txt @@ -2,29 +2,29 @@ Title: Tcl Standard Library Description: This package is intended to be a collection of Tcl packages that provide utility functions useful to a large collection of Tcl programmers. Rights: BSD -Version: 1.17 +Version: 1.18 URL: http://core.tcl.tk/tcllib Architecture: tcl Contributor: Contributor: Aaron Faupell Contributor: Andreas Kupries Contributor: Arjen Markus Contributor: Benjamin Riefenstahl Contributor: Bob Techentin -Contributor: Brent Welch +Contributor: Brent Welch Contributor: Brett Schwarz Contributor: Colin McCormack Contributor: Dan Kuchler Contributor: David N. Welton Contributor: Don Porter Contributor: Donal K. Fellows Contributor: Elchonon Edelson Contributor: Emmanuel Frecon -Contributor: Eric Melski +Contributor: Eric Melski Contributor: Gerald Lester Contributor: Gerhard Reithofer Contributor: Jeff Hobbs Contributor: Joe English Contributor: Johannes-Heinrich Vogeler @@ -32,20 +32,20 @@ Contributor: Kevin B, Kenny Contributor: Kevin B. Kenny Contributor: Kevin Kenny Contributor: Lars Hellstr\"om Contributor: Marty Backe -Contributor: Melissa Chawla +Contributor: Melissa Chawla Contributor: Michael Schlenker Contributor: Miguel Sofer Contributor: Pat Thoyts Contributor: Peter MacDonald Contributor: Pierre David Contributor: Reinhard Max Contributor: Ross Mohn -Contributor: Sandeep Tamhankar +Contributor: Sandeep Tamhankar Contributor: Scott Redman Contributor: Scott Stanton Contributor: Steffen Traeger Contributor: Stephane Arnold Contributor: Steve Ball Contributor: Will Duquette Index: embedded/www/index.html ================================================================== --- embedded/www/index.html +++ embedded/www/index.html @@ -109,11 +109,11 @@ docstrip_util .dtx - docstrip · tcldocstrip + docstrip · docstrip_util · tcldocstrip Keywords: / @@ -2111,11 +2111,11 @@ lambda LaTeX - docstrip · tcldocstrip + docstrip · docstrip_util · tcldocstrip latex doctools::idx · doctools::idx · doctools::toc · doctools::toc Index: embedded/www/tcllib/files/modules/docstrip/docstrip_util.html ================================================================== --- embedded/www/tcllib/files/modules/docstrip/docstrip_util.html +++ embedded/www/tcllib/files/modules/docstrip/docstrip_util.html @@ -1,5 +1,6 @@ +
-
-

TEST(z) 3.14.15.926 .MODULE. ""

-

Name

+

TEST(z) 3.14.15.926 .MODULE. ""

+

Name

TEST -

-

Table Of Contents

-
    -
  • Table Of Contents
  • -
  • Description
  • -
  • Copyright
  • + -

    Description

    + - Index: modules/doctools/tests/html/01 ================================================================== --- modules/doctools/tests/html/01 +++ modules/doctools/tests/html/01 @@ -22,11 +22,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -39,15 +39,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -60,58 +60,58 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
    -

    TEST(z) 3.14.15.926 .MODULE. ""

    -

    Name

    +

    TEST(z) 3.14.15.926 .MODULE. ""

    +

    Name

    TEST -

    -

    Table Of Contents

    -
      -
    • Table Of Contents
    • -
    • Description
    • -
    • Copyright
    • + -

      Description

      +

      Description

      Argument ::Argument:: Class ::Class:: Command ::Command:: Comment :::: Const ::Constant:: @@ -128,9 +128,9 @@ Type ::Type:: Uri ::Uri:: Variable ::Variable:: Widget ::Widget::

      - Index: modules/doctools/tests/html/02 ================================================================== --- modules/doctools/tests/html/02 +++ modules/doctools/tests/html/02 @@ -22,11 +22,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -39,15 +39,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -60,75 +60,75 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
      -

      TEST(z) 3.14.15.926 .MODULE. "..THE_MODULE.."

      -

      Name

      +

      TEST(z) 3.14.15.926 .MODULE. "..THE_MODULE.."

      +

      Name

      TEST - ..THE_TITLE..

      -

      Table Of Contents

      -
        -
      • Table Of Contents
      • -
      • Synopsis
      • -
      • Description
      • -
      • See Also
      • -
      • Keywords
      • -
      • Copyright
      • + -

        Synopsis

        -
        -
          +

          Synopsis

          +
          +
          • package require AAA
          • package require BBB VVV
          -

          Description

          + -

          See Also

          +

          See Also

          ELSE, OTHER

          -

          Keywords

          +

          Keywords

          KEYA, KEYZ

          - Index: modules/doctools/tests/html/03 ================================================================== --- modules/doctools/tests/html/03 +++ modules/doctools/tests/html/03 @@ -22,11 +22,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -39,15 +39,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -60,83 +60,83 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
          -

          TEST(z) 3.14.15.926 .MODULE. ""

          -

          Name

          +

          TEST(z) 3.14.15.926 .MODULE. ""

          +

          Name

          TEST -

          -

          Table Of Contents

          -
            -
          • Table Of Contents
          • -
          • Description
          • -
          • AaA
          • -
          • BbB + -

            Description

            + -

            AaA

            +

            AaA

            1

            -

            BbB

            +

            BbB

            22

            -

            BbB.cCc

            +

            BbB.cCc

            333

            - -

            EeE

            +

            EeE

            5555

            At AaA.

            At __undefined__.

            - Index: modules/doctools/tests/html/04 ================================================================== --- modules/doctools/tests/html/04 +++ modules/doctools/tests/html/04 @@ -22,11 +22,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -39,15 +39,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -60,67 +60,67 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
            -

            TEST(z) 3.14.15.926 .MODULE. ""

            -

            Name

            +

            TEST(z) 3.14.15.926 .MODULE. ""

            +

            Name

            TEST -

            -

            Table Of Contents

            -
              -
            • Table Of Contents
            • -
            • Description
            • -
            • Copyright
            • + -

              Description

              +

              Description

              BEGINNE HIER

              -
              +
               	 Example Block  More Lines
               
              -
              +
               Inlined Example \
               Next Line
               

              FERTIG

              - Index: modules/doctools/tests/html/05 ================================================================== --- modules/doctools/tests/html/05 +++ modules/doctools/tests/html/05 @@ -23,11 +23,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -40,15 +40,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -61,104 +61,104 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
              -

              BASIC(a) 5 .MODULE. ""

              -

              Name

              +

              BASIC(a) 5 .MODULE. ""

              +

              Name

              BASIC -

              -

              Table Of Contents

              -
                -
              • Table Of Contents
              • -
              • Synopsis
              • -
              • Description
              • -
              • Copyright
              • + -

                Synopsis

                -
                -
                  + -

                  Description

                  +

                  Description

                  OK

                  -
                  +
                  integer argument-1

                  verification

                  string argument-2 (out)

                  mogrification

                  -
                  +
                  command-a

                  explanation

                  command-b

                  elucidation

                  -
                  +
                  term

                  definition

                  a-command

                  semantic

                  -
                    +
                    1. A

                    2. B

                      C

                      D

                    -
                      +
                      • 1

                      • 2

                        2a

                        2b

                      -
                      +
                      option-1

                      meaning

                      option-2 value

                      elaboration

                      -
                      +
                      Command-Line Switch: background
                      Database Name: Background
                      Database Class: Color

                      candy

                      @@ -168,9 +168,9 @@

                      caramel

                      KO

                  - Index: modules/doctools/tests/html/06 ================================================================== --- modules/doctools/tests/html/06 +++ modules/doctools/tests/html/06 @@ -22,11 +22,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -39,15 +39,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -60,69 +60,69 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
                  -

                  TEST(z) 3.14.15.926 .MODULE. ""

                  -

                  Name

                  +

                  TEST(z) 3.14.15.926 .MODULE. ""

                  +

                  Name

                  TEST -

                  -

                  Table Of Contents

                  -
                    -
                  • Table Of Contents
                  • -
                  • Description
                  • -
                  • Copyright
                  • + -

                    Description

                    -
                      +

                      Description

                      +
                      • 1

                        2

                        3

                      • -
                          +
                          1. a

                            b

                            c

                          2. -
                            +
                            foo

                            snafu

                            bar

                            barf

                            roo
                            @@ -137,9 +137,9 @@
                          3. 4

                            5

                            6

                      - Index: modules/doctools/tests/html/07 ================================================================== --- modules/doctools/tests/html/07 +++ modules/doctools/tests/html/07 @@ -22,11 +22,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -39,15 +39,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -60,65 +60,65 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
                      -

                      TEST(z) 3.14.15.926 .MODULE. ""

                      -

                      Name

                      +

                      TEST(z) 3.14.15.926 .MODULE. ""

                      +

                      Name

                      TEST -

                      -

                      Table Of Contents

                      -
                        -
                      • Table Of Contents
                      • -
                      • Description
                      • -
                      • Copyright
                      • + -

                        Description

                        -
                          +

                          Description

                          +
                          • 1

                          • 2

                            -
                              +
                              1. a

                              2. b

                                -
                                +
                                foo

                                snafu

                                bar

                                barf

                                roo
                                @@ -129,9 +129,9 @@

                              22

                            1. 3

                          - Index: modules/doctools/tests/html/08 ================================================================== --- modules/doctools/tests/html/08 +++ modules/doctools/tests/html/08 @@ -23,11 +23,11 @@ font-size: large; color: #005A9C; background: transparent; text-align: left; } - H1.title { + H1.doctools_title { text-align: center; } UL,OL { margin-right: 0em; margin-top: 3pt; @@ -40,15 +40,15 @@ list-style: decimal; } DT { padding-top: 1ex; } - UL.toc,UL.toc UL, UL.toc UL UL { + UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL { font: normal 12pt/14pt sans-serif; list-style: none; } - LI.section, LI.subsection { + LI.doctools_section, LI.doctools_subsection { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } @@ -61,96 +61,96 @@ padding-bottom: 0.5ex; padding-left: 1ex; padding-right: 1ex; width: 100%; } - PRE.example { + PRE.doctools_example { color: black; background: #f5dcb3; border: 1px solid black; } - UL.requirements LI, UL.syntax LI { + UL.doctools_requirements LI, UL.doctools_syntax LI { list-style: none; margin-left: 0em; text-indent: 0em; padding: 0em; } - DIV.synopsis { + DIV.doctools_synopsis { color: black; background: #80ffff; border: 1px solid black; font-family: serif; margin-top: 1em; margin-bottom: 1em; } - UL.syntax { + UL.doctools_syntax { margin-top: 1em; border-top: 1px solid black; } - UL.requirements { + UL.doctools_requirements { margin-bottom: 1em; border-bottom: 1px solid black; } --> -
                          -

                          ALL(a) 5 .MODULE. "..THE_MODULE.."

                          -

                          Name

                          +

                          ALL(a) 5 .MODULE. "..THE_MODULE.."

                          +

                          Name

                          ALL - ..THE_TITLE..

                          -

                          Table Of Contents

                          -
                            -
                          • Table Of Contents
                          • -
                          • Synopsis
                          • -
                          • Description
                          • -
                          • API + -

                            Synopsis

                            -
                            -
                              +

                              Synopsis

                              +
                              +
                              • package require AAA
                              • package require BBB VVV
                              • package require CCC ?VVV?
                              -
                              -

                              Description

                              -
                              +

                              Description

                              +
                              NAME

                              DESCRIPTION ::Command::

                              NAME

                              DESCRIPTION ::::

                              NAME

                              DESCRIPTION ::Constant::

                              -

                              API

                              -
                              +

                              API

                              +
                              TERM

                              DESCRIPTION ::Emphasis::

                              TERM

                              DESCRIPTION ::"File/Path"::

                              -
                              +
                              Command-Line Switch: NAME
                              Database Name: DBNAME
                              Database Class: CLASS

                              DESCRIPTION NARGLE

                              @@ -167,55 +167,55 @@
                              TERM

                              DESCRIPTION

                              CMDNAME ...

                              DESCRIPTION ::Namespace::

                              -
                              +
                              TYPE NAME

                              DESCRIPTION ::Argument::

                              TYPE NAME

                              DESCRIPTION ::Option::

                              TYPE NAME (MODE)

                              DESCRIPTION ::?Optional?::

                              -
                              +
                                   THE ARGUMENT IS USED IN THIS
                                   AND/OR THAT MANNER
                               
                              CMDNAME ...

                              DESCRIPTION ::Package::

                              CMDNAME ...

                              DESCRIPTION ::SystemCommand::

                              -
                              +
                              NAME

                              DESCRIPTION ::Term::

                              NAME

                              DESCRIPTION ::Type::

                              NAME ARGUMENT

                              DESCRIPTION ::Uri::

                              -

                              NARGLE

                              -
                                +

                                NARGLE

                                +
                                1. PARAGRAPH ::UriLabel::

                                2. PARAGRAPH ::Variable::

                                3. PARAGRAPH ::Widget::

                                  -
                                    +
                                    • PARAGRAPH ::Class::

                                    • PARAGRAPH

                                    • PARAGRAPH

                              -

                              See Also

                              +

                              See Also

                              ELSE, OTHER

                              -

                              Keywords

                              +

                              Keywords

                              KEYA, KEYZ

                              - Index: modules/fileutil/pkgIndex.tcl ================================================================== --- modules/fileutil/pkgIndex.tcl +++ modules/fileutil/pkgIndex.tcl @@ -1,10 +1,10 @@ if {![package vsatisfies [package provide Tcl] 8.2]} {return} package ifneeded fileutil 1.15 [list source [file join $dir fileutil.tcl]] if {![package vsatisfies [package provide Tcl] 8.3]} {return} -package ifneeded fileutil::traverse 0.5 [list source [file join $dir traverse.tcl]] +package ifneeded fileutil::traverse 0.6 [list source [file join $dir traverse.tcl]] if {![package vsatisfies [package provide Tcl] 8.4]} {return} package ifneeded fileutil::multi 0.1 [list source [file join $dir multi.tcl]] package ifneeded fileutil::multi::op 0.5.3 [list source [file join $dir multiop.tcl]] package ifneeded fileutil::decode 0.2 [list source [file join $dir decode.tcl]] Index: modules/fileutil/traverse.man ================================================================== --- modules/fileutil/traverse.man +++ modules/fileutil/traverse.man @@ -1,7 +1,7 @@ [comment {-*- text -*- doctools manpage}] -[vset VERSION 0.5] +[vset VERSION 0.6] [manpage_begin fileutil_traverse n [vset VERSION]] [keywords {directory traversal}] [keywords traversal] [moddesc {file utilities}] [titledesc {Iterative directory traversal}] Index: modules/fileutil/traverse.tcl ================================================================== --- modules/fileutil/traverse.tcl +++ modules/fileutil/traverse.tcl @@ -501,6 +501,6 @@ } # ### ### ### ######### ######### ######### ## Ready -package provide fileutil::traverse 0.5 +package provide fileutil::traverse 0.6 Index: modules/ftp/ftp_geturl.man ================================================================== --- modules/ftp/ftp_geturl.man +++ modules/ftp/ftp_geturl.man @@ -1,7 +1,8 @@ +[vset VERSION 0.2.2] [comment {-*- tcl -*- doctools manpage}] -[manpage_begin ftp::geturl n 0.2.1] +[manpage_begin ftp::geturl n [vset VERSION]] [see_also ftpd] [see_also mime] [see_also pop3] [see_also smtp] [keywords ftp] @@ -10,11 +11,11 @@ [keywords {rfc 959}] [moddesc {ftp client}] [titledesc {Uri handler for ftp urls}] [category Networking] [require Tcl 8.2] -[require ftp::geturl [opt 0.2.1]] +[require ftp::geturl [opt [vset VERSION]]] [description] This package provides a command which wraps around the client side of the [term ftp] protocol provided by package [package ftp] to allow the retrieval of urls using the [term ftp] schema. Index: modules/ftp/ftp_geturl.tcl ================================================================== --- modules/ftp/ftp_geturl.tcl +++ modules/ftp/ftp_geturl.tcl @@ -130,6 +130,6 @@ } # ================================================================== # At last, everything is fine, we can provide the package. -package provide ftp::geturl [lindex {Revision: 0.2.1} 1] +package provide ftp::geturl [lindex {Revision: 0.2.2} 1] Index: modules/ftp/pkgIndex.tcl ================================================================== --- modules/ftp/pkgIndex.tcl +++ modules/ftp/pkgIndex.tcl @@ -1,3 +1,3 @@ if {![package vsatisfies [package provide Tcl] 8.2]} {return} package ifneeded ftp 2.4.13 [list source [file join $dir ftp.tcl]] -package ifneeded ftp::geturl 0.2.1 [list source [file join $dir ftp_geturl.tcl]] +package ifneeded ftp::geturl 0.2.2 [list source [file join $dir ftp_geturl.tcl]] Index: modules/ftpd/ftpd.man ================================================================== --- modules/ftpd/ftpd.man +++ modules/ftpd/ftpd.man @@ -1,17 +1,18 @@ +[vset VERSION 1.3] [comment {-*- tcl -*- doctools manpage}] -[manpage_begin ftpd n 1.2.6] +[manpage_begin ftpd n [vset VERSION]] [keywords ftp] [keywords ftpd] [keywords ftpserver] [keywords {rfc 959}] [keywords services] [moddesc {Tcl FTP Server Package}] [titledesc {Tcl FTP server implementation}] [category Networking] [require Tcl 8.3] -[require ftpd [opt 1.2.6]] +[require ftpd [opt [vset VERSION]]] [description] The [package ftpd] package provides a simple Tcl-only server library for the FTP protocol as specified in RFC 959 ([uri http://www.rfc-editor.org/rfc/rfc959.txt]). Index: modules/ftpd/ftpd.tcl ================================================================== --- modules/ftpd/ftpd.tcl +++ modules/ftpd/ftpd.tcl @@ -2002,11 +2002,11 @@ # sourced into the interpreter. # # Patched Mark O'Connor # -package provide ftpd 1.2.6 +package provide ftpd 1.3 ## ## Implementation of passive command ## Index: modules/ftpd/pkgIndex.tcl ================================================================== --- modules/ftpd/pkgIndex.tcl +++ modules/ftpd/pkgIndex.tcl @@ -1,2 +1,2 @@ if {![package vsatisfies [package provide Tcl] 8.3]} {return} -package ifneeded ftpd 1.2.6 [list source [file join $dir ftpd.tcl]] +package ifneeded ftpd 1.3 [list source [file join $dir ftpd.tcl]] Index: modules/httpd/httpd.tcl ================================================================== --- modules/httpd/httpd.tcl +++ modules/httpd/httpd.tcl @@ -582,11 +582,11 @@ package require nettool set port [::nettool::allocate_port 8015] } set port_listening $port set myaddr [my cget myaddr] - puts [list [self] listening on $port $myaddr] + #puts [list [self] listening on $port $myaddr] if {$myaddr ne {}} { foreach ip $myaddr { lappend socklist [socket -server [namespace code [list my connect]] -myaddr $ip $port] } Index: modules/httpd/httpd.test ================================================================== --- modules/httpd/httpd.test +++ modules/httpd/httpd.test @@ -4,11 +4,11 @@ source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] -testsNeedTcl 8.5 +testsNeedTcl 8.6 ;# tool requires 8.6 testsNeedTcltest 2 testsNeed TclOO 1 support { Index: modules/httpd/scgi.test ================================================================== --- modules/httpd/scgi.test +++ modules/httpd/scgi.test @@ -1,333 +1,330 @@ -### -# scgi.test - Copyright (c) 2015 Sean Woods -# -# Author: Sean Woods, yoda@etoyoc.com -# Unit tests of the SCGI server -### - -# ------------------------------------------------------------------------- - -set here [file dirname [file join [pwd] [info script]]] - -## -# Use the Tcllib Test Tools -## -source [file join $here .. .. .. tcllib modules devtools testutilities.tcl] - -testsNeedTcl 8.6 -testsNeedTcltest 2 - -testsNeed TclOO 1 - -support { - use cmdline/cmdline.tcl cmdline - use fileutil/fileutil.tcl fileutil - - use md5/md5.tcl md5 - use base64/base64.tcl base64 - use mime/mime.tcl mime - - use uri/uri.tcl uri - use ncgi/ncgi.tcl ncgi - - use dns/ip.tcl ip - use nettool/nettool.tcl nettool - use html/html.tcl html - - use dicttool/dicttool.tcl dicttool - use cron/cron.tcl cron - use oodialect/oodialect.tcl oo::dialect - use oometa/oometa.tcl oo::meta - use sha1/sha1.tcl sha1 - use tool/index.tcl tool -} - -testing { - useLocal httpd.tcl httpd - useLocal scgi-app.tcl scgi::app -} - -# ------------------------------------------------------------------------- -namespace eval ::scgi {} -namespace eval ::scgi::test {} - -### -# Minimal test harness for the .tests -# Not intended for public consumption -# (But if you find it handy, please steal!) -namespace eval ::scgi::test {} - -proc ::scgi::encode_request {headers body info} { - variable server_block - - dict set outdict CONTENT_LENGTH [string length $body] - set outdict [dict merge $outdict $server_block $info] - dict set outdict PWD [pwd] - foreach {key value} $headers { - switch $key { - SCRIPT_NAME - - REQUEST_METHOD - - REQUEST_URI { - dict set outdict $key $value - } - default { - dict set outdict HTTP_[string map {"-" "_"} [string toupper $key]] $value - } - } - } - set result {} - foreach {name value} $outdict { - append result $name \x00 $value \x00 - } - return "[string length $result]:$result," -} - -proc ::scgi::test::send {port text} { - set sock [socket localhost $port] - variable reply - set reply($sock) {} - chan configure $sock -translation binary -blocking 0 -buffering full -buffersize 4096 - chan event $sock readable [list ::scgi::test::get_reply $sock] - - set headers {} - set body {} - set read_headers 1 - foreach line [split $text \n] { - if {$read_headers} { - if { $line eq {} } { - set read_headers 0 - } else { - append headers $line \n - } - } else { - append body $line \n - } - } - set block [::scgi::encode_request $headers $body {}] - puts -nonewline $sock $block - flush $sock - puts -nonewline $sock $body - flush $sock - while {$reply($sock) eq {}} { - update - } - #vwait [namespace current]::reply($sock) - return $reply($sock) -} - -proc ::scgi::test::get_reply {sock} { - variable buffer - set data [read $sock] - append buffer($sock) $data - if {[eof $sock]} { - chan event $sock readable {} - set [namespace current]::reply($sock) $buffer($sock) - unset buffer($sock) - } -} - -namespace eval ::scgi { - variable server_block {SCGI 1.0 SERVER_SOFTWARE {TclScgiServer/0.1}} -} - -### -# Build the reply class -### -tool::class create ::scgi::test::reply { - superclass ::scgi::reply - - method error {code {msg {}}} { - my reset - my variable data error_codes - if {![info exists data(url)]} { - set data(url) {} - } - if {![info exists error_codes($code)]} { - set errorstring "Unknown Error Code" - } else { - set errorstring $error_codes($code) - } - my reply_headers replace {} - my reply_headers set Status: "$code $errorstring" - my reply_headers set Content-Type: {text/plain} - my puts " -$code $errorstring -Got the error $code $errorstring - -while trying to obtain $data(url) -" - } - - method reset {} { - my variable reply_body - my reply_headers replace {Status: {200 OK} Content-Type: text/plain} - set reply_body {} - } - - method content {} { - my reset - switch [my query_headers get REQUEST_URI] { - /file { - my variable reply_file - set reply_file [file join $::here pkgIndex.tcl] - } - /time { - my puts [clock seconds] - } - /error { - error { -The programmer asked me to die this way - } - } - /echo - - default { - my puts [my PostData] - } - } - } - - ### - # Output the result or error to the channel - # and destroy this object - ### - method output {} { - my variable reply_body reply_file reply_chan chan - chan configure $chan -translation {binary binary} - - set headers [my reply_headers dump] - if {[dict exists $headers Status:]} { - set result "[my EncodeStatus [dict get $headers Status:]]\n" - } else { - set result "[my EncodeStatus {505 Internal Error}]\n" - - } - foreach {key value} $headers { - # Ignore Status and Content-length, if given - if {$key in {Status: Content-length:}} continue - append result "$key $value" \n - } - if {![info exists reply_file] || [string length $reply_body]} { - ### - # Return dynamic content - ### - set reply_body [string trim $reply_body] - append result "Content-length: [string length $reply_body]" \n \n - append result $reply_body - puts -nonewline $chan $result - } else { - ### - # Return a stream of data from a file - ### - append result "Content-length: [file size $reply_file]" \n \n - puts -nonewline $chan $result - set reply_chan [open $reply_file r] - chan copy $reply_chan $chan - catch {close $reply_chan} - } - chan flush $chan - my destroy - } -} - -### -# Build the server -### -tool::class create scgi::test::app { - superclass ::scgi::app - - property reply_class ::scgi::test::reply -} - -scgi::test::app create TESTAPP port 10001 - -test scgi-client-0001 {Do an echo request} { - -set reply [::scgi::test::send 10001 {REQUEST_METHOD POST -REQUEST_URI /echo - -THIS IS MY CODE -}] -} {Status: 200 OK -Content-Type: text/plain -Connection: close -Content-length: 15 - -THIS IS MY CODE} - -test scgi-client-0002 {Do another echo request} { -set reply [::scgi::test::send 10001 {REQUEST_METHOD POST -REQUEST_URI /echo - -THOUGH THERE ARE MANY LIKE IT -}] -} {Status: 200 OK -Content-Type: text/plain -Connection: close -Content-length: 29 - -THOUGH THERE ARE MANY LIKE IT} - -test scgi-client-0003 {Do another echo request} { -set reply [::scgi::test::send 10001 {REQUEST_METHOD POST -REQUEST_URI /echo - -THIS ONE ALONE IS MINE -}] -} {Status: 200 OK -Content-Type: text/plain -Connection: close -Content-length: 22 - -THIS ONE ALONE IS MINE} - -test scgi-client-0004 {URL Generates Error} { - -set reply [::scgi::test::send 10001 {REQUEST_METHOD POST -REQUEST_URI /error - -THIS ONE ALONE IS MINE -}] } {Status: 500 Server Internal Error -Content-Type: text/plain -Connection: close -Content-length: 89 - -500 Server Internal Error -Got the error 500 Server Internal Error - -while trying to obtain} - -set checkreply [subst {Status: 200 OK -Content-Type: text/plain -Connection: close -Content-length: 10 - -[clock seconds]}] - -test scgi-client-0005 {URL Different output with a different request} { -set reply [::scgi::test::send 10001 {REQUEST_METHOD POST -REQUEST_URI /time - -THIS ONE ALONE IS MINE -}] } $checkreply - -set fin [open [file join $here pkgIndex.tcl] r] -set checkreply [read $fin] -close $fin -test scgi-client-0006 {Return a file} { -set reply [::scgi::test::send 10001 {REQUEST_METHOD POST -REQUEST_URI /file -}] } "Status: 200 OK -Content-Type: text/plain -Connection: close -Content-length: [string length $checkreply] - -$checkreply" - -# ------------------------------------------------------------------------- - -testsuiteCleanup - -# Local variables: -# mode: tcl -# indent-tabs-mode: nil -# End: +### +# scgi.test - Copyright (c) 2015 Sean Woods +# +# Author: Sean Woods, yoda@etoyoc.com +# Unit tests of the SCGI server +### + +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.6 +testsNeedTcltest 2 + +testsNeed TclOO 1 + +support { + use cmdline/cmdline.tcl cmdline + use fileutil/fileutil.tcl fileutil + + use md5/md5.tcl md5 + use base64/base64.tcl base64 + use mime/mime.tcl mime + + use uri/uri.tcl uri + use ncgi/ncgi.tcl ncgi + + use dns/ip.tcl ip + use nettool/nettool.tcl nettool + use html/html.tcl html + + use dicttool/dicttool.tcl dicttool + use cron/cron.tcl cron + use oodialect/oodialect.tcl oo::dialect + use oometa/oometa.tcl oo::meta + use sha1/sha1.tcl sha1 + use tool/index.tcl tool +} + +testing { + useLocal httpd.tcl httpd + useLocal scgi-app.tcl scgi::app +} + +# ------------------------------------------------------------------------- +namespace eval ::scgi {} +namespace eval ::scgi::test {} + +### +# Minimal test harness for the .tests +# Not intended for public consumption +# (But if you find it handy, please steal!) +namespace eval ::scgi::test {} + +proc ::scgi::encode_request {headers body info} { + variable server_block + + dict set outdict CONTENT_LENGTH [string length $body] + set outdict [dict merge $outdict $server_block $info] + dict set outdict PWD [pwd] + foreach {key value} $headers { + switch $key { + SCRIPT_NAME - + REQUEST_METHOD - + REQUEST_URI { + dict set outdict $key $value + } + default { + dict set outdict HTTP_[string map {"-" "_"} [string toupper $key]] $value + } + } + } + set result {} + foreach {name value} $outdict { + append result $name \x00 $value \x00 + } + return "[string length $result]:$result," +} + +proc ::scgi::test::send {port text} { + set sock [socket localhost $port] + variable reply + set reply($sock) {} + chan configure $sock -translation binary -blocking 0 -buffering full -buffersize 4096 + chan event $sock readable [list ::scgi::test::get_reply $sock] + + set headers {} + set body {} + set read_headers 1 + foreach line [split $text \n] { + if {$read_headers} { + if { $line eq {} } { + set read_headers 0 + } else { + append headers $line \n + } + } else { + append body $line \n + } + } + set block [::scgi::encode_request $headers $body {}] + puts -nonewline $sock $block + flush $sock + puts -nonewline $sock $body + flush $sock + while {$reply($sock) eq {}} { + update + } + #vwait [namespace current]::reply($sock) + return $reply($sock) +} + +proc ::scgi::test::get_reply {sock} { + variable buffer + set data [read $sock] + append buffer($sock) $data + if {[eof $sock]} { + chan event $sock readable {} + set [namespace current]::reply($sock) $buffer($sock) + unset buffer($sock) + } +} + +namespace eval ::scgi { + variable server_block {SCGI 1.0 SERVER_SOFTWARE {TclScgiServer/0.1}} +} + +### +# Build the reply class +### +tool::class create ::scgi::test::reply { + superclass ::scgi::reply + + method error {code {msg {}}} { + my reset + my variable data error_codes + if {![info exists data(url)]} { + set data(url) {} + } + if {![info exists error_codes($code)]} { + set errorstring "Unknown Error Code" + } else { + set errorstring $error_codes($code) + } + my reply_headers replace {} + my reply_headers set Status: "$code $errorstring" + my reply_headers set Content-Type: {text/plain} + my puts " +$code $errorstring +Got the error $code $errorstring + +while trying to obtain $data(url) +" + } + + method reset {} { + my variable reply_body + my reply_headers replace {Status: {200 OK} Content-Type: text/plain} + set reply_body {} + } + + method content {} { + my reset + switch [my query_headers get REQUEST_URI] { + /file { + my variable reply_file + set reply_file [file join $::here pkgIndex.tcl] + } + /time { + my puts [clock seconds] + } + /error { + error { +The programmer asked me to die this way + } + } + /echo - + default { + my puts [my PostData] + } + } + } + + ### + # Output the result or error to the channel + # and destroy this object + ### + method output {} { + my variable reply_body reply_file reply_chan chan + chan configure $chan -translation {binary binary} + + set headers [my reply_headers dump] + if {[dict exists $headers Status:]} { + set result "[my EncodeStatus [dict get $headers Status:]]\n" + } else { + set result "[my EncodeStatus {505 Internal Error}]\n" + + } + foreach {key value} $headers { + # Ignore Status and Content-length, if given + if {$key in {Status: Content-length:}} continue + append result "$key $value" \n + } + if {![info exists reply_file] || [string length $reply_body]} { + ### + # Return dynamic content + ### + set reply_body [string trim $reply_body] + append result "Content-length: [string length $reply_body]" \n \n + append result $reply_body + puts -nonewline $chan $result + } else { + ### + # Return a stream of data from a file + ### + append result "Content-length: [file size $reply_file]" \n \n + puts -nonewline $chan $result + set reply_chan [open $reply_file r] + chan copy $reply_chan $chan + catch {close $reply_chan} + } + chan flush $chan + my destroy + } +} + +### +# Build the server +### +tool::class create scgi::test::app { + superclass ::scgi::app + + property reply_class ::scgi::test::reply +} + +scgi::test::app create TESTAPP port 10001 + +test scgi-client-0001 {Do an echo request} { + +set reply [::scgi::test::send 10001 {REQUEST_METHOD POST +REQUEST_URI /echo + +THIS IS MY CODE +}] +} {Status: 200 OK +Content-Type: text/plain +Connection: close +Content-length: 15 + +THIS IS MY CODE} + +test scgi-client-0002 {Do another echo request} { +set reply [::scgi::test::send 10001 {REQUEST_METHOD POST +REQUEST_URI /echo + +THOUGH THERE ARE MANY LIKE IT +}] +} {Status: 200 OK +Content-Type: text/plain +Connection: close +Content-length: 29 + +THOUGH THERE ARE MANY LIKE IT} + +test scgi-client-0003 {Do another echo request} { +set reply [::scgi::test::send 10001 {REQUEST_METHOD POST +REQUEST_URI /echo + +THIS ONE ALONE IS MINE +}] +} {Status: 200 OK +Content-Type: text/plain +Connection: close +Content-length: 22 + +THIS ONE ALONE IS MINE} + +test scgi-client-0004 {URL Generates Error} { + +set reply [::scgi::test::send 10001 {REQUEST_METHOD POST +REQUEST_URI /error + +THIS ONE ALONE IS MINE +}] } {Status: 500 Server Internal Error +Content-Type: text/plain +Connection: close +Content-length: 89 + +500 Server Internal Error +Got the error 500 Server Internal Error + +while trying to obtain} + +set checkreply [subst {Status: 200 OK +Content-Type: text/plain +Connection: close +Content-length: 10 + +[clock seconds]}] + +test scgi-client-0005 {URL Different output with a different request} { +set reply [::scgi::test::send 10001 {REQUEST_METHOD POST +REQUEST_URI /time + +THIS ONE ALONE IS MINE +}] } $checkreply + +set fin [open [file join $here pkgIndex.tcl] r] +set checkreply [read $fin] +close $fin +test scgi-client-0006 {Return a file} { +set reply [::scgi::test::send 10001 {REQUEST_METHOD POST +REQUEST_URI /file +}] } "Status: 200 OK +Content-Type: text/plain +Connection: close +Content-length: [string length $checkreply] + +$checkreply" + +# ------------------------------------------------------------------------- + +testsuiteCleanup + +# Local variables: +# mode: tcl +# indent-tabs-mode: nil +# End: Index: modules/math/constants.man ================================================================== --- modules/math/constants.man +++ modules/math/constants.man @@ -1,7 +1,7 @@ [comment {-*- tcl -*- doctools manpage}] -[vset VERSION 1.0.1] +[vset VERSION 1.0.2] [manpage_begin math::constants n [vset VERSION]] [keywords constants] [keywords degrees] [keywords e] [keywords math] Index: modules/math/constants.tcl ================================================================== --- modules/math/constants.tcl +++ modules/math/constants.tcl @@ -10,11 +10,11 @@ # #---------------------------------------------------------------------- package require Tcl 8.2 -package provide math::constants 1.0.1 +package provide math::constants 1.0.2 # namespace constants # Create a convenient namespace for the constants # namespace eval ::math::constants { Index: modules/math/pdf_stat.tcl ================================================================== --- modules/math/pdf_stat.tcl +++ modules/math/pdf_stat.tcl @@ -597,11 +597,11 @@ # set result {} # for { set i 0 } {$i < $number } { incr i } { # lappend result [Inverse-cdf-normal $mean $stdev [expr {rand()}]] # } - puts "Random-lognormal: $mu -- $sigma" + #puts "Random-lognormal: $mu -- $sigma" set result {} for { set i 0 } {$i < $number } { incr i 2 } { set angle [expr {$twopi * rand()}] Index: modules/math/pkgIndex.tcl ================================================================== --- modules/math/pkgIndex.tcl +++ modules/math/pkgIndex.tcl @@ -2,11 +2,11 @@ package ifneeded math 1.2.5 [list source [file join $dir math.tcl]] package ifneeded math::geometry 1.1.3 [list source [file join $dir geometry.tcl]] package ifneeded math::fuzzy 0.2.1 [list source [file join $dir fuzzy.tcl]] package ifneeded math::complexnumbers 1.0.2 [list source [file join $dir qcomplex.tcl]] package ifneeded math::special 0.3.0 [list source [file join $dir special.tcl]] -package ifneeded math::constants 1.0.1 [list source [file join $dir constants.tcl]] +package ifneeded math::constants 1.0.2 [list source [file join $dir constants.tcl]] package ifneeded math::polynomials 1.0.1 [list source [file join $dir polynomials.tcl]] package ifneeded math::rationalfunctions 1.0.1 [list source [file join $dir rational_funcs.tcl]] package ifneeded math::fourier 1.0.2 [list source [file join $dir fourier.tcl]] if {![package vsatisfies [package provide Tcl] 8.3]} {return} @@ -22,12 +22,12 @@ package ifneeded math::bignum 3.1.1 [list source [file join $dir bignum.tcl]] package ifneeded math::bigfloat 1.2.2 [list source [file join $dir bigfloat.tcl]] package ifneeded math::machineparameters 0.1 [list source [file join $dir machineparameters.tcl]] if {![package vsatisfies [package provide Tcl] 8.5]} {return} -package ifneeded math::calculus::symdiff 1.0 [list source [file join $dir symdiff.tcl]] +package ifneeded math::calculus::symdiff 1.0.1 [list source [file join $dir symdiff.tcl]] package ifneeded math::bigfloat 2.0.2 [list source [file join $dir bigfloat2.tcl]] package ifneeded math::numtheory 1.0 [list source [file join $dir numtheory.tcl]] package ifneeded math::decimal 1.0.3 [list source [file join $dir decimal.tcl]] if {![package vsatisfies [package require Tcl] 8.6]} {return} package ifneeded math::exact 1.0 [list source [file join $dir exact.tcl]] Index: modules/math/symdiff.man ================================================================== --- modules/math/symdiff.man +++ modules/math/symdiff.man @@ -1,16 +1,17 @@ -[manpage_begin math::calculus::symdiff n 1.0] +[vset VERSION 1.0.1] +[manpage_begin math::calculus::symdiff n [vset VERSION]] [see_also math::calculus] [see_also math::interpolate] [copyright "2010 by Kevin B. Kenny Redistribution permitted under the terms of the Open\ Publication License "] [moddesc "Symbolic differentiation for Tcl"] [titledesc "Symbolic differentiation for Tcl"] [require Tcl 8.5] [require grammar::aycock 1.0] -[require math::calculus::symdiff 1.0] +[require math::calculus::symdiff [vset VERSION]] [description] [para] The [cmd math::calculus::symdiff] package provides a symbolic differentiation facility for Tcl math expressions. It is useful for providing derivatives to packages that either require the Jacobian of a set of functions or else Index: modules/math/symdiff.tcl ================================================================== --- modules/math/symdiff.tcl +++ modules/math/symdiff.tcl @@ -18,11 +18,11 @@ # This package requires the 'tclparser' from http://tclpro.sf.net/ # to analyze the expressions presented to it. package require Tcl 8.4 package require grammar::aycock 1.0 -package provide math::calculus::symdiff 1.0 +package provide math::calculus::symdiff 1.0.1 namespace eval math {} namespace eval math::calculus {} namespace eval math::calculus::symdiff { namespace export jacobian symdiff Index: modules/nettool/nettool.man ================================================================== --- modules/nettool/nettool.man +++ modules/nettool/nettool.man @@ -1,7 +1,7 @@ [comment {-*- tcl -*- doctools manpage}] -[vset PACKAGE_VERSION 0.1] +[vset PACKAGE_VERSION 0.5.1] [manpage_begin nettool n [vset PACKAGE_VERSION]] [keywords {nettool}] [keywords {odie}] [copyright {2015 Sean Woods }] [moddesc {nettool}] Index: modules/nns/nns_cluster.tcl ================================================================== --- modules/nns/nns_cluster.tcl +++ modules/nns/nns_cluster.tcl @@ -1,499 +1,499 @@ -# -*- tcl -*- -# ### ### ### ######### ######### ######### -## Name Service - Cluster - -# ### ### ### ######### ######### ######### -## Requirements - -package require Tcl 8.5 -package require comm ; # Generic message transport -package require interp ; # Interpreter helpers. -package require logger ; # Tracing internal activity -package require uuid -package require cron -package require nettool 0.4 -package require udp - -namespace eval ::comm {} -::namespace eval ::cluster {} - -### -# This package implements an ad/hoc zero configuration -# like network of comm (and other) network connections -### - -### -# topic: 5cffdc91e554c923ebe43df13fac77d5 -### -proc ::cluster::broadcast {args} { - if {$::cluster::config(debug)} { - puts [list $::cluster::local_pid SEND $args] - } - while {[catch { - set sock [listen] - puts -nonewline $sock [list [pid] {*}$args] - flush $sock - } error]} { - set ::cluster::broadcast_sock {} - if {$::cluster::config(debug)} { - puts "Broadcast ERR: $error - Reopening Socket" - ::cluster::sleep 2000 - } else { - # Double the delay - ::cluster::sleep 250 - } - } -} - -### -# topic: 963e24601d0dc61580c9727a74cdba67 -### -proc ::cluster::cname rawname { - # Convert rawname to a canonical name - if {[string first @ $rawname] < 0 } { - return $rawname - } - lassign [split $rawname @] service host - if {$host eq {}} { - set host * - } - if {$host in {local localhost}} { - set host [::cluster::self] - } - return $service@$host -} - -### -# topic: 3f5f9e197cc9666dd7953d97fef34019 -### -proc ::cluster::ipaddr macid { - # Convert rawname to a canonical name - if {$macid eq [::cluster::self]} { - return 127.0.0.1 - } - foreach {servname dat} [search [cname *@$macid]] { - if {[dict exists $dat ipaddr]} { - return [dict get $dat ipaddr] - } - } - ### - # Do a lookup - ### - error "Could not locate $macid" -} - -### -# topic: e57db306f0e931d7febb5ad1f9cb2247 -### -proc ::cluster::listen {} { - variable broadcast_sock - if {$broadcast_sock != {}} { - return $broadcast_sock - } - variable discovery_port - variable discovery_group - set broadcast_sock [udp_open $discovery_port reuse] - fconfigure $broadcast_sock -buffering none -blocking 0 \ - -mcastadd $discovery_group \ - -remote [list $discovery_group $discovery_port] - fileevent $broadcast_sock readable [list [namespace current]::UDPPacket $broadcast_sock] - ::cron::every cluster_heartbeat 30 ::cluster::heartbeat - - return $broadcast_sock -} - -### -# topic: 2a33c825920162b0791e2cdae62e6164 -### -proc ::cluster::UDPPacket sock { - variable ptpdata - set pid [pid] - set packet [string trim [read $sock]] - set peer [fconfigure $sock -peer] - - if {![string is ascii $packet]} return - if {![::info complete $packet]} return - - set sender [lindex $packet 0] - if {$::cluster::config(debug)} { - puts [list $::cluster::local_pid RECV $peer $packet] - } - if { $sender eq [pid] } { - # Ignore messages from myself - return - } - - set messagetype [lindex $packet 1] - set messageinfo [lrange $packet 2 end] - switch -- [string toupper $messagetype] { - -SERVICE { - set serviceurl [lindex $messageinfo 0] - set serviceinfo [lindex $messageinfo 1] - dict set serviceinfo ipaddr [lindex $peer 0] - dict set serviceinfo closed 1 - Service_Remove $serviceurl $serviceinfo - } - ~SERVICE { - set ::cluster::recv_message 1 - set serviceurl [lindex $messageinfo 0] - set serviceinfo [lindex $messageinfo 1] - dict set serviceinfo ipaddr [lindex $peer 0] - Service_Modified $serviceurl $serviceinfo - set ::cluster::ping_recv($serviceurl) [clock seconds] - } - +SERVICE { - set ::cluster::recv_message 1 - set serviceurl [lindex $messageinfo 0] - set serviceinfo [lindex $messageinfo 1] - dict set serviceinfo ipaddr [lindex $peer 0] - Service_Add $serviceurl $serviceinfo - set ::cluster::ping_recv($serviceurl) [clock seconds] - } - DISCOVERY { - variable config - ::cluster::heartbeat - if {$config(local_registry)==1} { - variable ptpdata - # A local registry barfs back all data that is sees - set now [clock seconds] - foreach {url info} [array get ptpdata] { - broadcast ~SERVICE $url $info - } - } - } - LOG { - set serviceurl [lindex $messageinfo 0] - set serviceinfo [lindex $messageinfo 1] - Service_Log $serviceurl $serviceinfo - } - ?WHOIS { - set wmacid [lindex $messageinfo 0] - if { $wmacid eq [::cluster::self] } { - broadcast +WHOIS [::cluster::self] - } - } - PONG { - set serviceurl [lindex $messageinfo 0] - set serviceinfo [lindex $messageinfo 1] - Service_Modified $serviceurl $serviceinfo - set ::cluster::ping_recv($serviceurl) [clock seconds] - } - PING { - set serviceurl [lindex $messageinfo 0] - foreach {url info} [search_local $serviceurl] { - broadcast PONG $url $info - } - } - } -} - -proc ::cluster::ping {rawname} { - set rcpt [cname $rawname] - set ::cluster::ping_recv($rcpt) 0 - set starttime [clock seconds] - set sleeptime 1 - while 1 { - broadcast PING $rcpt - update - if {$::cluster::ping_recv($rcpt)} break - if {([clock seconds] - $starttime) > 120} { - error "Could not locate a local dispatch service" - } - sleep [incr sleeptime $sleeptime] - } -} - -proc ::cluster::publish {url infodict} { - variable local_data - dict set infodict macid [self] - dict set infodict pid [pid] - set local_data($url) $infodict - broadcast +SERVICE $url $infodict -} - -proc ::cluster::heartbeat {} { - variable ptpdata - variable config - - set now [clock seconds] - foreach {item info} [array get ptpdata] { - set remove 0 - if {[dict exists $info closed] && [dict get $info closed]} { - set remove 1 - } - if {[dict exists $info updated] && ($now - [dict get $info updated])>$config(discovery_ttl)} { - set remove 1 - } - if {$remove} { - Service_Remove $item $info - } - } - ### - # Broadcast the status of our local services - ### - variable local_data - foreach {url info} [array get local_data] { - broadcast ~SERVICE $url $info - } - ### - # Trigger any cluster events that haven't fired off - ### - foreach {eventid info} [array get ::cluster::events] { - if {$info eq "-1"} { - unset ::cluster::events($eventid) - } else { - lassign $info seconds ms - if {$seconds < $now} { - set ::cluster::events($eventid) -1 - } - } - } -} - -proc ::cluster::info url { - variable local_data - return [array get local_data $url] -} - -proc ::cluster::unpublish {url infodict} { - variable local_data - foreach {field value} $infodict { - dict set local_data($url) $field $value - } - set info [lindex [array get local_data $url] 1] - broadcast -SERVICE $url $info - unset -nocomplain local_data($url) -} - -proc ::cluster::configure {url infodict {send 1}} { - variable local_data - if {![::info exists local_data($url)]} return - foreach {field value} $infodict { - dict set local_data($url) $field $value - } - if {$send} { - broadcast ~SERVICE $url $local_data($url) - update - } -} - -proc ::cluster::get_free_port {{startport 50000}} { - ::cluster::listen - ::cluster::broadcast DISCOVERY - after 10000 {set ::cluster::recv_message 0} - # Wait for a pingback or timeout - vwait ::cluster::recv_message - cluster::sleep 2000 - - set macid [::cluster::macid] - set port $startport - set conflict 1 - while {$conflict} { - set conflict 0 - set port [::nettool::find_port $port] - foreach {url info} [search *@[macid]] { - if {[dict exists $info port] && [dict get $info port] eq $port} { - incr port - set conflict 1 - break - } - } - update - } - return $port -} - -proc ::cluster::log args { - broadcast LOG {*}$args -} - -proc ::cluster::LookUp {rawname} { - set self [self] - foreach {servname dat} [search [cname $rawname]] { - # Ignore services in the process of closing - if {[dict exists $dat macid] && [dict get $dat macid] eq $self} { - set ipaddr 127.0.0.1 - } elseif {![dict exists $dat ipaddr]} { - set ipaddr [ipaddr [lindex [split $servname @] 1]] - } else { - set ipaddr [dict get $dat ipaddr] - } - if {![dict exists $dat port]} continue - if {[llength $ipaddr] > 1} { - ## Sort out which ipaddr is proper later - # for now take the last one - set ipaddr [lindex [dict get $dat ipaddr] end] - } - set port [dict get $dat port] - return [list $port $ipaddr] - } - return {} -} - -### -# topic: 2c04e58c7f93798f9a5ed31a7f5779ab -### -proc ::cluster::resolve {rawname} { - set result [LookUp $rawname] - if { $result ne {} } { - return $result - } - broadcast DISCOVERY - sleep 250 - set result [LookUp $rawname] - if { $result ne {} } { - return $result - } - error "Could not located $rawname" -} - -### -# topic: 6c7a0a3a8cb2a7ae98ff0dba960c37a7 -### -proc ::cluster::pid {} { - variable local_pid - return $local_pid -} - -proc ::cluster::macid {} { - variable local_macid - return $local_macid -} - -proc ::cluster::self {} { - variable local_macid - return $local_macid -} - -### -# topic: f1b71ff12a8ac10373c67ac5d973cd81 -### -proc ::cluster::send {service command args} { - set commid [resolve $service] - return [::comm::comm send $commid $command {*}$args] -} - -proc ::cluster::throw {service command args} { - set commid [LookUp $service] - if { $commid eq {} } { - return - } - if [catch {::comm::comm send -async $commid $command {*}$args} reply] { - puts $stderr "ERR: SEND $service $reply" - } -} - -proc ::cluster::sleep ms { - set eventid [incr ::cluster::eventcount] - set ::cluster::event($eventid) [list [clock seconds] [expr {[clock milliseconds]+$ms}]] - after $ms set ::cluster::event($eventid) -1 - vwait ::cluster::event($eventid) -} - -### -# topic: c8475e832c912e962f238c61580b669e -### -proc ::cluster::search pattern { - set result {} - variable ptpdata - foreach {service dat} [array get ptpdata $pattern] { - foreach {field value} $dat { - dict set result $service $field $value - } - } - variable local_data - foreach {service dat} [array get local_data $pattern] { - foreach {field value} $dat { - dict set result $service $field $value - dict set result $service ipaddr 127.0.0.1 - } - } - return $result -} - -proc ::cluster::is_local pattern { - variable local_data - if {[array exists local_data $pattern]} { - return 1 - } - if {[array exists local_data [cname $pattern]]} { - return 1 - } - return 0 -} - -proc ::cluster::search_local pattern { - set result {} - variable local_data - foreach {service dat} [array get local_data $pattern] { - foreach {field value} $dat { - dict set result $service $field $value - } - } - return $result -} - -proc ::cluster::Service_Add {serviceurl serviceinfo} { - # Code to register the presence of a service - if {[dict exists $serviceinfo pid] && [dict get $serviceinfo pid] eq [pid] } { - # Ignore attempts to overwrite locally managed services from the network - return - } - variable ptpdata - set ptpdata($serviceurl) $serviceinfo - dict set ptpdata($serviceurl) updated [clock seconds] -} - -proc ::cluster::Service_Remove {serviceurl serviceinfo} { - # Code to register the loss of a service - if {[dict exists $serviceinfo pid] && [dict get $serviceinfo pid] eq [pid] } { - # Ignore attempts to overwrite locally managed services from the network - return - } - variable ptpdata - unset -nocomplain ptpdata($serviceurl) -} - -proc ::cluster::Service_Modified {serviceurl serviceinfo} { - # Code to register an update to a service - if {[dict exists $serviceinfo pid] && [dict get $serviceinfo pid] eq [pid] } { - # Ignore attempts to overwrite locally managed services from the network - return - } - variable ptpdata - foreach {field value} $serviceinfo { - dict set ptpdata($serviceurl) $field $value - } - dict set ptpdata($serviceurl) updated [clock seconds] -} - -proc ::cluster::Service_Log {service data} { - # Code to register an event -} - -### -# topic: d3e48e31cc4baf81395179f4097fee1b -### -namespace eval ::cluster { - # Number of seconds to "remember" data - variable config - array set config { - debug 0 - discovery_ttl 300 - local_registry 0 - } - variable eventcount 0 - variable cache {} - variable broadcast_sock {} - variable cache_maxage 500 - variable discovery_port 38573 - # Currently an unassigned group in the - # Local Network Control Block (224.0.0/24) - # See: RFC3692 and http://www.iana.org - variable discovery_group 224.0.0.200 - variable local_port {} - variable local_macid [lindex [::nettool::mac_list] 0] - variable local_pid [::uuid::uuid generate] -} - +# -*- tcl -*- +# ### ### ### ######### ######### ######### +## Name Service - Cluster + +# ### ### ### ######### ######### ######### +## Requirements + +package require Tcl 8.5 +package require comm ; # Generic message transport +package require interp ; # Interpreter helpers. +package require logger ; # Tracing internal activity +package require uuid +package require cron +package require nettool 0.4 +package require udp + +namespace eval ::comm {} +::namespace eval ::cluster {} + +### +# This package implements an ad/hoc zero configuration +# like network of comm (and other) network connections +### + +### +# topic: 5cffdc91e554c923ebe43df13fac77d5 +### +proc ::cluster::broadcast {args} { + if {$::cluster::config(debug)} { + puts [list $::cluster::local_pid SEND $args] + } + while {[catch { + set sock [listen] + puts -nonewline $sock [list [pid] {*}$args] + flush $sock + } error]} { + set ::cluster::broadcast_sock {} + if {$::cluster::config(debug)} { + puts "Broadcast ERR: $error - Reopening Socket" + ::cluster::sleep 2000 + } else { + # Double the delay + ::cluster::sleep 250 + } + } +} + +### +# topic: 963e24601d0dc61580c9727a74cdba67 +### +proc ::cluster::cname rawname { + # Convert rawname to a canonical name + if {[string first @ $rawname] < 0 } { + return $rawname + } + lassign [split $rawname @] service host + if {$host eq {}} { + set host * + } + if {$host in {local localhost}} { + set host [::cluster::self] + } + return $service@$host +} + +### +# topic: 3f5f9e197cc9666dd7953d97fef34019 +### +proc ::cluster::ipaddr macid { + # Convert rawname to a canonical name + if {$macid eq [::cluster::self]} { + return 127.0.0.1 + } + foreach {servname dat} [search [cname *@$macid]] { + if {[dict exists $dat ipaddr]} { + return [dict get $dat ipaddr] + } + } + ### + # Do a lookup + ### + error "Could not locate $macid" +} + +### +# topic: e57db306f0e931d7febb5ad1f9cb2247 +### +proc ::cluster::listen {} { + variable broadcast_sock + if {$broadcast_sock != {}} { + return $broadcast_sock + } + variable discovery_port + variable discovery_group + set broadcast_sock [udp_open $discovery_port reuse] + fconfigure $broadcast_sock -buffering none -blocking 0 \ + -mcastadd $discovery_group \ + -remote [list $discovery_group $discovery_port] + fileevent $broadcast_sock readable [list [namespace current]::UDPPacket $broadcast_sock] + ::cron::every cluster_heartbeat 30 ::cluster::heartbeat + + return $broadcast_sock +} + +### +# topic: 2a33c825920162b0791e2cdae62e6164 +### +proc ::cluster::UDPPacket sock { + variable ptpdata + set pid [pid] + set packet [string trim [read $sock]] + set peer [fconfigure $sock -peer] + + if {![string is ascii $packet]} return + if {![::info complete $packet]} return + + set sender [lindex $packet 0] + if {$::cluster::config(debug)} { + puts [list $::cluster::local_pid RECV $peer $packet] + } + if { $sender eq [pid] } { + # Ignore messages from myself + return + } + + set messagetype [lindex $packet 1] + set messageinfo [lrange $packet 2 end] + switch -- [string toupper $messagetype] { + -SERVICE { + set serviceurl [lindex $messageinfo 0] + set serviceinfo [lindex $messageinfo 1] + dict set serviceinfo ipaddr [lindex $peer 0] + dict set serviceinfo closed 1 + Service_Remove $serviceurl $serviceinfo + } + ~SERVICE { + set ::cluster::recv_message 1 + set serviceurl [lindex $messageinfo 0] + set serviceinfo [lindex $messageinfo 1] + dict set serviceinfo ipaddr [lindex $peer 0] + Service_Modified $serviceurl $serviceinfo + set ::cluster::ping_recv($serviceurl) [clock seconds] + } + +SERVICE { + set ::cluster::recv_message 1 + set serviceurl [lindex $messageinfo 0] + set serviceinfo [lindex $messageinfo 1] + dict set serviceinfo ipaddr [lindex $peer 0] + Service_Add $serviceurl $serviceinfo + set ::cluster::ping_recv($serviceurl) [clock seconds] + } + DISCOVERY { + variable config + ::cluster::heartbeat + if {$config(local_registry)==1} { + variable ptpdata + # A local registry barfs back all data that is sees + set now [clock seconds] + foreach {url info} [array get ptpdata] { + broadcast ~SERVICE $url $info + } + } + } + LOG { + set serviceurl [lindex $messageinfo 0] + set serviceinfo [lindex $messageinfo 1] + Service_Log $serviceurl $serviceinfo + } + ?WHOIS { + set wmacid [lindex $messageinfo 0] + if { $wmacid eq [::cluster::self] } { + broadcast +WHOIS [::cluster::self] + } + } + PONG { + set serviceurl [lindex $messageinfo 0] + set serviceinfo [lindex $messageinfo 1] + Service_Modified $serviceurl $serviceinfo + set ::cluster::ping_recv($serviceurl) [clock seconds] + } + PING { + set serviceurl [lindex $messageinfo 0] + foreach {url info} [search_local $serviceurl] { + broadcast PONG $url $info + } + } + } +} + +proc ::cluster::ping {rawname} { + set rcpt [cname $rawname] + set ::cluster::ping_recv($rcpt) 0 + set starttime [clock seconds] + set sleeptime 1 + while 1 { + broadcast PING $rcpt + update + if {$::cluster::ping_recv($rcpt)} break + if {([clock seconds] - $starttime) > 120} { + error "Could not locate a local dispatch service" + } + sleep [incr sleeptime $sleeptime] + } +} + +proc ::cluster::publish {url infodict} { + variable local_data + dict set infodict macid [self] + dict set infodict pid [pid] + set local_data($url) $infodict + broadcast +SERVICE $url $infodict +} + +proc ::cluster::heartbeat {} { + variable ptpdata + variable config + + set now [clock seconds] + foreach {item info} [array get ptpdata] { + set remove 0 + if {[dict exists $info closed] && [dict get $info closed]} { + set remove 1 + } + if {[dict exists $info updated] && ($now - [dict get $info updated])>$config(discovery_ttl)} { + set remove 1 + } + if {$remove} { + Service_Remove $item $info + } + } + ### + # Broadcast the status of our local services + ### + variable local_data + foreach {url info} [array get local_data] { + broadcast ~SERVICE $url $info + } + ### + # Trigger any cluster events that haven't fired off + ### + foreach {eventid info} [array get ::cluster::events] { + if {$info eq "-1"} { + unset ::cluster::events($eventid) + } else { + lassign $info seconds ms + if {$seconds < $now} { + set ::cluster::events($eventid) -1 + } + } + } +} + +proc ::cluster::info url { + variable local_data + return [array get local_data $url] +} + +proc ::cluster::unpublish {url infodict} { + variable local_data + foreach {field value} $infodict { + dict set local_data($url) $field $value + } + set info [lindex [array get local_data $url] 1] + broadcast -SERVICE $url $info + unset -nocomplain local_data($url) +} + +proc ::cluster::configure {url infodict {send 1}} { + variable local_data + if {![::info exists local_data($url)]} return + foreach {field value} $infodict { + dict set local_data($url) $field $value + } + if {$send} { + broadcast ~SERVICE $url $local_data($url) + update + } +} + +proc ::cluster::get_free_port {{startport 50000}} { + ::cluster::listen + ::cluster::broadcast DISCOVERY + after 10000 {set ::cluster::recv_message 0} + # Wait for a pingback or timeout + vwait ::cluster::recv_message + cluster::sleep 2000 + + set macid [::cluster::macid] + set port $startport + set conflict 1 + while {$conflict} { + set conflict 0 + set port [::nettool::find_port $port] + foreach {url info} [search *@[macid]] { + if {[dict exists $info port] && [dict get $info port] eq $port} { + incr port + set conflict 1 + break + } + } + update + } + return $port +} + +proc ::cluster::log args { + broadcast LOG {*}$args +} + +proc ::cluster::LookUp {rawname} { + set self [self] + foreach {servname dat} [search [cname $rawname]] { + # Ignore services in the process of closing + if {[dict exists $dat macid] && [dict get $dat macid] eq $self} { + set ipaddr 127.0.0.1 + } elseif {![dict exists $dat ipaddr]} { + set ipaddr [ipaddr [lindex [split $servname @] 1]] + } else { + set ipaddr [dict get $dat ipaddr] + } + if {![dict exists $dat port]} continue + if {[llength $ipaddr] > 1} { + ## Sort out which ipaddr is proper later + # for now take the last one + set ipaddr [lindex [dict get $dat ipaddr] end] + } + set port [dict get $dat port] + return [list $port $ipaddr] + } + return {} +} + +### +# topic: 2c04e58c7f93798f9a5ed31a7f5779ab +### +proc ::cluster::resolve {rawname} { + set result [LookUp $rawname] + if { $result ne {} } { + return $result + } + broadcast DISCOVERY + sleep 250 + set result [LookUp $rawname] + if { $result ne {} } { + return $result + } + error "Could not locate $rawname" +} + +### +# topic: 6c7a0a3a8cb2a7ae98ff0dba960c37a7 +### +proc ::cluster::pid {} { + variable local_pid + return $local_pid +} + +proc ::cluster::macid {} { + variable local_macid + return $local_macid +} + +proc ::cluster::self {} { + variable local_macid + return $local_macid +} + +### +# topic: f1b71ff12a8ac10373c67ac5d973cd81 +### +proc ::cluster::send {service command args} { + set commid [resolve $service] + return [::comm::comm send $commid $command {*}$args] +} + +proc ::cluster::throw {service command args} { + set commid [LookUp $service] + if { $commid eq {} } { + return + } + if [catch {::comm::comm send -async $commid $command {*}$args} reply] { + puts $stderr "ERR: SEND $service $reply" + } +} + +proc ::cluster::sleep ms { + set eventid [incr ::cluster::eventcount] + set ::cluster::event($eventid) [list [clock seconds] [expr {[clock milliseconds]+$ms}]] + after $ms set ::cluster::event($eventid) -1 + vwait ::cluster::event($eventid) +} + +### +# topic: c8475e832c912e962f238c61580b669e +### +proc ::cluster::search pattern { + set result {} + variable ptpdata + foreach {service dat} [array get ptpdata $pattern] { + foreach {field value} $dat { + dict set result $service $field $value + } + } + variable local_data + foreach {service dat} [array get local_data $pattern] { + foreach {field value} $dat { + dict set result $service $field $value + dict set result $service ipaddr 127.0.0.1 + } + } + return $result +} + +proc ::cluster::is_local pattern { + variable local_data + if {[array exists local_data $pattern]} { + return 1 + } + if {[array exists local_data [cname $pattern]]} { + return 1 + } + return 0 +} + +proc ::cluster::search_local pattern { + set result {} + variable local_data + foreach {service dat} [array get local_data $pattern] { + foreach {field value} $dat { + dict set result $service $field $value + } + } + return $result +} + +proc ::cluster::Service_Add {serviceurl serviceinfo} { + # Code to register the presence of a service + if {[dict exists $serviceinfo pid] && [dict get $serviceinfo pid] eq [pid] } { + # Ignore attempts to overwrite locally managed services from the network + return + } + variable ptpdata + set ptpdata($serviceurl) $serviceinfo + dict set ptpdata($serviceurl) updated [clock seconds] +} + +proc ::cluster::Service_Remove {serviceurl serviceinfo} { + # Code to register the loss of a service + if {[dict exists $serviceinfo pid] && [dict get $serviceinfo pid] eq [pid] } { + # Ignore attempts to overwrite locally managed services from the network + return + } + variable ptpdata + unset -nocomplain ptpdata($serviceurl) +} + +proc ::cluster::Service_Modified {serviceurl serviceinfo} { + # Code to register an update to a service + if {[dict exists $serviceinfo pid] && [dict get $serviceinfo pid] eq [pid] } { + # Ignore attempts to overwrite locally managed services from the network + return + } + variable ptpdata + foreach {field value} $serviceinfo { + dict set ptpdata($serviceurl) $field $value + } + dict set ptpdata($serviceurl) updated [clock seconds] +} + +proc ::cluster::Service_Log {service data} { + # Code to register an event +} + +### +# topic: d3e48e31cc4baf81395179f4097fee1b +### +namespace eval ::cluster { + # Number of seconds to "remember" data + variable config + array set config { + debug 0 + discovery_ttl 300 + local_registry 0 + } + variable eventcount 0 + variable cache {} + variable broadcast_sock {} + variable cache_maxage 500 + variable discovery_port 38573 + # Currently an unassigned group in the + # Local Network Control Block (224.0.0/24) + # See: RFC3692 and http://www.iana.org + variable discovery_group 224.0.0.200 + variable local_port {} + variable local_macid [lindex [::nettool::mac_list] 0] + variable local_pid [::uuid::uuid generate] +} + package provide nameserv::cluster 0.2.3 Index: modules/nns/nns_cluster.test ================================================================== --- modules/nns/nns_cluster.test +++ modules/nns/nns_cluster.test @@ -1,180 +1,195 @@ -# -*- tcl -*- -# common.test: Tests for the common code of the name service -# -# Sourcing this file into Tcl runs the tests and generates output for -# errors. No output means no errors were found. - -# ------------------------------------------------------------------------- - -set testutilsscript [file join \ - [file dirname [file dirname [file join [pwd] [info script]]]] \ - devtools testutilities.tcl] -source $testutilsscript - -package require tcltest -testsNeedTcl 8 -testsNeedTcltest 1.0 - -set ::WHOAMI Main - -support { - use comm/comm.tcl comm - use nettool/nettool.tcl nettool - use cron/cron.tcl cron - use uuid/uuid.tcl uuid -} -testing { - useLocal nns_cluster.tcl nameserv::cluster -} - -### -# Create a server in a seperate interp -### -interp create server -interp eval server [list set testutilsscript $testutilsscript] -interp eval server { - source $testutilsscript - set ::WHOAMI Server - - package require tcltest - testsNeedTcl 8 - testsNeedTcltest 1.0 - - support { - use comm/comm.tcl comm - use nettool/nettool.tcl nettool - use cron/cron.tcl cron - use uuid/uuid.tcl uuid - } - testing { - useLocal nns_cluster.tcl nameserv::cluster - } - set ::cluster::local_pid SERVER - ::cluster::publish nns@[::cluster::macid] {} - update -} -set ::cluster::local_pid MAIN -set macid [::cluster::macid] -set myport [::nettool::allocate_port 10000] - -::cluster::ping nns@$macid -set data [::cluster::search *] -test cluster-comm-1.0 {Publish service - NNS} { - dict exists $data nns@[::cluster::macid] -} {1} - -test cluster-comm-1.1 {Check that non-existant service does not exist} { - dict exists $data foo@bar -} {0} - -### -# Create a phony service -### -set now [clock seconds] -::cluster::publish foo@bar [list clocktime $now] -# The windows event loop needs a breather -::cluster::ping nns@$macid - -set data [::cluster::search *] -test cluster-comm-2.0 {Publish service - NNS} { - dict exists $data nns@[::cluster::macid] -} {1} -test cluster-comm-2.1 {Check that new service does exists} { - dict exists $data foo@bar -} {1} - -### -# Modify a service -### -::cluster::configure foo@bar {color pink} -::cluster::ping nns@$macid - -set data [::cluster::search foo@bar] -test cluster-comm-2.3 {Modify a service} { - dict get $data foo@bar color -} {pink} - -::cluster::configure foo@bar {color blue} -::cluster::ping nns@$macid - -set data [::cluster::search foo@bar] -test cluster-comm-2.4 {Modify a service} { - dict get $data foo@bar color -} {blue} - - -### -# Create another client in a seperate interp -### -interp create otherclient -interp eval otherclient [list set testutilsscript $testutilsscript] -interp eval otherclient { - source $testutilsscript - set ::WHOAMI Other - - package require tcltest - testsNeedTcl 8 - testsNeedTcltest 1.0 - - support { - use comm/comm.tcl comm - use nettool/nettool.tcl nettool - use cron/cron.tcl cron - use uuid/uuid.tcl uuid - } - testing { - useLocal nns_cluster.tcl nameserv::cluster - } - - ### - # Cheat and let this server know the server is local - ### - set macid [::cluster::macid] - set myport [::nettool::allocate_port 10000] - - set url other@$macid - ::comm::comm new $url -port $myport -local 0 -listen 1 - ::cluster::publish $url [list port $myport protocol comm class comm] -} -::cluster::ping nns@$macid - -set data [::cluster::search *] -test cluster-comm-3.0 {Publish service - NNS} { - dict exists $data nns@[::cluster::macid] -} {1} -test cluster-comm-3.1 {Check that new service does exists} { - dict exists $data foo@bar -} {1} -test cluster-comm-3.3 {Check that other service does exists} { - dict exists $data other@[::cluster::macid] -} {1} - -test cluster-comm-3.3 {Check that other service does exists} { - set chan [::cluster::resolve other@[::cluster::macid]] - ::comm::comm send $chan {set foo b} -} {b} - -### -# Remove the phony service -### -::cluster::unpublish foo@bar {} -::cluster::ping nns@$macid - -set data [::cluster::search *] -test cluster-comm-4.0 {Publish service - NNS} { - dict exists $data nns@[::cluster::macid] -} {1} -test cluster-comm-4.1 {Check that service is closed} { - dict exists $data foo@bar -} {0} - -### -# Have a non-existant service fail -### -test cluster-comm-5.0 {Service lookup failture} { - catch {cluster::resolve foo@bar} pat -} {1} -puts $pat - -testsuiteCleanup +# -*- tcl -*- +# common.test: Tests for the common code of the name service +# +# Sourcing this file into Tcl runs the tests and generates output for +# errors. No output means no errors were found. + +# ------------------------------------------------------------------------- + +set testutilsscript [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] +source $testutilsscript + +package require tcltest +testsNeedTcl 8.5 +testsNeedTcltest 1.0 + +set ::WHOAMI Main + +support { + use snit/snit2.tcl snit + use comm/comm.tcl comm + use dns/ip.tcl ip + use nettool/nettool.tcl nettool + use cron/cron.tcl cron + use uuid/uuid.tcl uuid + use interp/interp.tcl interp + use log/logger.tcl logger + use md5/md5x.tcl md5 +} +testing { + useLocal nns_cluster.tcl nameserv::cluster +} + +### +# Create a server in a seperate interp +### +interp create server +interp eval server [list set testutilsscript $testutilsscript] +interp eval server { + source $testutilsscript + set ::WHOAMI Server + + package require tcltest + testsNeedTcl 8.5 + testsNeedTcltest 1.0 + + support { + use snit/snit2.tcl snit + use comm/comm.tcl comm + use dns/ip.tcl ip + use nettool/nettool.tcl nettool + use cron/cron.tcl cron + use uuid/uuid.tcl uuid + use interp/interp.tcl interp + use log/logger.tcl logger + use md5/md5x.tcl md5 + } + testing { + use nns/nns_cluster.tcl nameserv::cluster + } + set ::cluster::local_pid SERVER + ::cluster::publish nns@[::cluster::macid] {} + update +} +set ::cluster::local_pid MAIN +set macid [::cluster::macid] +set myport [::nettool::allocate_port 10000] + +::cluster::ping nns@$macid +set data [::cluster::search *] +test cluster-comm-1.0 {Publish service - NNS} { + dict exists $data nns@[::cluster::macid] +} {1} + +test cluster-comm-1.1 {Check that non-existant service does not exist} { + dict exists $data foo@bar +} {0} + +### +# Create a phony service +### +set now [clock seconds] +::cluster::publish foo@bar [list clocktime $now] +# The windows event loop needs a breather +::cluster::ping nns@$macid + +set data [::cluster::search *] +test cluster-comm-2.0 {Publish service - NNS} { + dict exists $data nns@[::cluster::macid] +} {1} +test cluster-comm-2.1 {Check that new service does exists} { + dict exists $data foo@bar +} {1} + +### +# Modify a service +### +::cluster::configure foo@bar {color pink} +::cluster::ping nns@$macid + +set data [::cluster::search foo@bar] +test cluster-comm-2.3 {Modify a service} { + dict get $data foo@bar color +} {pink} + +::cluster::configure foo@bar {color blue} +::cluster::ping nns@$macid + +set data [::cluster::search foo@bar] +test cluster-comm-2.4 {Modify a service} { + dict get $data foo@bar color +} {blue} + + +### +# Create another client in a seperate interp +### +interp create otherclient +interp eval otherclient [list set testutilsscript $testutilsscript] +interp eval otherclient { + source $testutilsscript + set ::WHOAMI Other + + package require tcltest + testsNeedTcl 8 + testsNeedTcltest 1.0 + + support { + use snit/snit2.tcl snit + use comm/comm.tcl comm + use dns/ip.tcl ip + use nettool/nettool.tcl nettool + use cron/cron.tcl cron + use uuid/uuid.tcl uuid + use interp/interp.tcl interp + use log/logger.tcl logger + use md5/md5x.tcl md5 + } + testing { + use nns/nns_cluster.tcl nameserv::cluster + } + + ### + # Cheat and let this server know the server is local + ### + set macid [::cluster::macid] + set myport [::nettool::allocate_port 10000] + + set url other@$macid + ::comm::comm new $url -port $myport -local 0 -listen 1 + ::cluster::publish $url [list port $myport protocol comm class comm] +} +::cluster::ping nns@$macid + +set data [::cluster::search *] +test cluster-comm-3.0 {Publish service - NNS} { + dict exists $data nns@[::cluster::macid] +} {1} +test cluster-comm-3.1 {Check that new service does exists} { + dict exists $data foo@bar +} {1} +test cluster-comm-3.3 {Check that other service does exists} { + dict exists $data other@[::cluster::macid] +} {1} + +test cluster-comm-3.3 {Check that other service does exists} { + set chan [::cluster::resolve other@[::cluster::macid]] + ::comm::comm send $chan {set foo b} +} {b} + +### +# Remove the phony service +### +::cluster::unpublish foo@bar {} +::cluster::ping nns@$macid + +set data [::cluster::search *] +test cluster-comm-4.0 {Publish service - NNS} { + dict exists $data nns@[::cluster::macid] +} {1} +test cluster-comm-4.1 {Check that service is closed} { + dict exists $data foo@bar +} {0} + +### +# Have a non-existant service fail +### +test cluster-comm-5.0 {Service lookup failture} { + catch {cluster::resolve foo@bar} pat +} {1} +#puts $pat + +testsuiteCleanup return Index: modules/nns/pkgIndex.tcl ================================================================== --- modules/nns/pkgIndex.tcl +++ modules/nns/pkgIndex.tcl @@ -3,6 +3,8 @@ if {![package vsatisfies [package provide Tcl] 8.4]} {return} package ifneeded nameserv 0.4.2 [list source [file join $dir nns.tcl]] package ifneeded nameserv::server 0.3.2 [list source [file join $dir server.tcl]] package ifneeded nameserv::auto 0.3 [list source [file join $dir nns_auto.tcl]] + +if {![package vsatisfies [package provide Tcl] 8.5]} {return} package ifneeded nameserv::cluster 0.2.3 [list source [file join $dir nns_cluster.tcl]] Index: modules/oodialect/oodialect.test ================================================================== --- modules/oodialect/oodialect.test +++ modules/oodialect/oodialect.test @@ -1,157 +1,162 @@ -# tool.test - Copyright (c) 2015 Sean Woods -# ------------------------------------------------------------------------- -set here [file dirname [file join [pwd] [info script]]] -source [file join $here .. .. .. tcllib modules devtools testutilities.tcl] -source [file join $here .. .. .. tcllib modules dicttool dicttool.tcl] -source [file join $here .. .. .. tcllib modules oometa oometa.tcl] - -testsNeedTcl 8.6 -testsNeedTcltest 2 - -testsNeed TclOO 1 - -testing { - useLocal oodialect.tcl oo::dialect -} - -::oo::dialect::create ::alpha - -proc ::alpha::define::is_alpha {} { - dict set ::testinfo([current_class]) is_alpha 1 -} - -::alpha::define ::alpha::object { - is_alpha -} - -::oo::dialect::create ::bravo ::alpha - -proc ::bravo::define::is_bravo {} { - dict set ::testinfo([current_class]) is_bravo 1 -} - -::bravo::define ::bravo::object { - is_bravo -} - -::oo::dialect::create ::charlie ::bravo - -proc ::charlie::define::is_charlie {} { - dict set ::testinfo([current_class]) is_charlie 1 -} - -::charlie::define ::charlie::object { - is_charlie -} - -::oo::dialect::create ::delta ::charlie - -proc ::delta::define::is_delta {} { - dict set ::testinfo([current_class]) is_delta 1 -} - -::delta::define ::delta::object { - is_delta -} - -::delta::class create adam { - is_alpha - is_bravo - is_charlie - is_delta -} - -test oodialect-keyword-001 {Testing keyword application} { - set ::testinfo(::adam) -} {is_alpha 1 is_bravo 1 is_charlie 1 is_delta 1} - -test oodialect-keyword-002 {Testing keyword application} { - set ::testinfo(::alpha::object) -} {is_alpha 1} - -test oodialect-keyword-003 {Testing keyword application} { - set ::testinfo(::bravo::object) -} {is_bravo 1} - -test oodialect-keyword-004 {Testing keyword application} { - set ::testinfo(::charlie::object) -} {is_charlie 1} - -test oodialect-keyword-005 {Testing keyword application} { - set ::testinfo(::delta::object) -} {is_delta 1} - -### -# Declare an object from a namespace -### -namespace eval ::test1 { - ::alpha::class create a { - aliases A - is_alpha - } - ::alpha::define b { - aliases B BEE - is_alpha - } - ::alpha::class create ::c { - aliases C - is_alpha - } - ::alpha::define ::d { - aliases D - is_alpha - } -} - -test oodialect-naming-001 {Testing keyword application} { - set ::testinfo(::test1::a) -} {is_alpha 1} - -test oodialect-naming-002 {Testing keyword application} { - set ::testinfo(::test1::b) -} {is_alpha 1} - -test oodialect-naming-003 {Testing keyword application} { - set ::testinfo(::c) -} {is_alpha 1} - -test oodialect-naming-004 {Testing keyword application} { - set ::testinfo(::d) -} {is_alpha 1} - -test oodialect-aliasing-001 {Testing keyword application} { -namespace eval ::test1 { - ::alpha::define e { - superclass A - } -} -} ::test1::e - -test oodialect-aliasing-002 {Testing keyword application} { -namespace eval ::test1 { - ::bravo::define f { - superclass A - } -} -} ::test1::f - -test oodialect-ancestry-001 {Testing heritage} { - ::oo::meta::ancestors ::test1::f -} {::oo::object ::alpha::object ::bravo::object ::test1::a ::test1::f} - -test oodialect-ancestry-001 {Testing heritage} { - ::oo::meta::ancestors ::alpha::object -} {::oo::object ::alpha::object} - -test oodialect-ancestry-001 {Testing heritage} { - ::oo::meta::ancestors ::delta::object -} {::oo::object ::alpha::object ::bravo::object ::charlie::object ::delta::object} -# ------------------------------------------------------------------------- - - -testsuiteCleanup - -# Local variables: -# mode: tcl -# indent-tabs-mode: nil +# tool.test - Copyright (c) 2015 Sean Woods +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.6 +testsNeedTcltest 2 +testsNeed TclOO 1 + +support { + use dicttool/dicttool.tcl dicttool + use oometa/oometa.tcl oo::meta +} +testing { + useLocal oodialect.tcl oo::dialect +} + +# ------------------------------------------------------------------------- + +::oo::dialect::create ::alpha + +proc ::alpha::define::is_alpha {} { + dict set ::testinfo([current_class]) is_alpha 1 +} + +::alpha::define ::alpha::object { + is_alpha +} + +::oo::dialect::create ::bravo ::alpha + +proc ::bravo::define::is_bravo {} { + dict set ::testinfo([current_class]) is_bravo 1 +} + +::bravo::define ::bravo::object { + is_bravo +} + +::oo::dialect::create ::charlie ::bravo + +proc ::charlie::define::is_charlie {} { + dict set ::testinfo([current_class]) is_charlie 1 +} + +::charlie::define ::charlie::object { + is_charlie +} + +::oo::dialect::create ::delta ::charlie + +proc ::delta::define::is_delta {} { + dict set ::testinfo([current_class]) is_delta 1 +} + +::delta::define ::delta::object { + is_delta +} + +::delta::class create adam { + is_alpha + is_bravo + is_charlie + is_delta +} + +test oodialect-keyword-001 {Testing keyword application} { + set ::testinfo(::adam) +} {is_alpha 1 is_bravo 1 is_charlie 1 is_delta 1} + +test oodialect-keyword-002 {Testing keyword application} { + set ::testinfo(::alpha::object) +} {is_alpha 1} + +test oodialect-keyword-003 {Testing keyword application} { + set ::testinfo(::bravo::object) +} {is_bravo 1} + +test oodialect-keyword-004 {Testing keyword application} { + set ::testinfo(::charlie::object) +} {is_charlie 1} + +test oodialect-keyword-005 {Testing keyword application} { + set ::testinfo(::delta::object) +} {is_delta 1} + +### +# Declare an object from a namespace +### +namespace eval ::test1 { + ::alpha::class create a { + aliases A + is_alpha + } + ::alpha::define b { + aliases B BEE + is_alpha + } + ::alpha::class create ::c { + aliases C + is_alpha + } + ::alpha::define ::d { + aliases D + is_alpha + } +} + +test oodialect-naming-001 {Testing keyword application} { + set ::testinfo(::test1::a) +} {is_alpha 1} + +test oodialect-naming-002 {Testing keyword application} { + set ::testinfo(::test1::b) +} {is_alpha 1} + +test oodialect-naming-003 {Testing keyword application} { + set ::testinfo(::c) +} {is_alpha 1} + +test oodialect-naming-004 {Testing keyword application} { + set ::testinfo(::d) +} {is_alpha 1} + +test oodialect-aliasing-001 {Testing keyword application} { +namespace eval ::test1 { + ::alpha::define e { + superclass A + } +} +} ::test1::e + +test oodialect-aliasing-002 {Testing keyword application} { +namespace eval ::test1 { + ::bravo::define f { + superclass A + } +} +} ::test1::f + +test oodialect-ancestry-001 {Testing heritage} { + ::oo::meta::ancestors ::test1::f +} {::oo::object ::alpha::object ::bravo::object ::test1::a ::test1::f} + +test oodialect-ancestry-001 {Testing heritage} { + ::oo::meta::ancestors ::alpha::object +} {::oo::object ::alpha::object} + +test oodialect-ancestry-001 {Testing heritage} { + ::oo::meta::ancestors ::delta::object +} {::oo::object ::alpha::object ::bravo::object ::charlie::object ::delta::object} +# ------------------------------------------------------------------------- + + +testsuiteCleanup + +# Local variables: +# mode: tcl +# indent-tabs-mode: nil # End: Index: modules/ooutil/ooutil.test ================================================================== --- modules/ooutil/ooutil.test +++ modules/ooutil/ooutil.test @@ -10,13 +10,11 @@ testsNeedTcltest 2 testsNeed TclOO 1 testing { - useLocal ooutil.tcl oo::util - useLocal oometa.tcl oo::meta - useLocal oooption.tcl oo::option + useLocal ooutil.tcl oo::util } # ------------------------------------------------------------------------- test ooutil-ticket-b3577ed586 {test scoping of delegation in oo::class.Delegate } -setup { Index: modules/pt/pkgIndex.tcl ================================================================== --- modules/pt/pkgIndex.tcl +++ modules/pt/pkgIndex.tcl @@ -9,11 +9,11 @@ # AST support package ifneeded pt::ast 1.1 [list source [file join $dir pt_astree.tcl]] # General parser support. Currently only conversion of structured # syntax errors (or parts thereof) into a human-readable form. -package ifneeded pt::util 1 [list source [file join $dir pt_util.tcl]] +package ifneeded pt::util 1.1 [list source [file join $dir pt_util.tcl]] # Parsing Expression support package ifneeded pt::pe 1.0.2 [list source [file join $dir pt_pexpression.tcl]] package ifneeded pt::pe::op 1.0.1 [list source [file join $dir pt_pexpr_op.tcl]] Index: modules/pt/pt_util.man ================================================================== --- modules/pt/pt_util.man +++ modules/pt/pt_util.man @@ -1,6 +1,6 @@ -[vset VERSION 1] +[vset VERSION 1.1] [comment {-*- text -*- doctools manpage}] [manpage_begin pt::util n [vset VERSION]] [include include/module.inc] [titledesc {General utilities}] [require pt::ast [opt [vset VERSION]]] Index: modules/pt/pt_util.tcl ================================================================== --- modules/pt/pt_util.tcl +++ modules/pt/pt_util.tcl @@ -154,7 +154,7 @@ } # # ## ### ##### ######## ############# ##################### ## Ready -package provide pt::util 1 +package provide pt::util 1.1 return Index: modules/tool/index.tcl ================================================================== --- modules/tool/index.tcl +++ modules/tool/index.tcl @@ -1,5 +1,6 @@ +package require Tcl 8.6 ;# try in pipeline.tcl. Possibly other things. package require dicttool package require TclOO package require sha1 package require oo::meta 0.4.1 package require oo::dialect Index: modules/tool/pkgIndex.tcl ================================================================== --- modules/tool/pkgIndex.tcl +++ modules/tool/pkgIndex.tcl @@ -6,6 +6,7 @@ # information so that packages will be loaded automatically # in response to "package require" commands. When this # script is sourced, the variable $dir must contain the # full path name of this file's directory. +if {![package vsatisfies [package provide Tcl] 8.6]} {return} package ifneeded tool 0.5 [list source [file join $dir index.tcl]] Index: modules/tool/tool.test ================================================================== --- modules/tool/tool.test +++ modules/tool/tool.test @@ -1,335 +1,339 @@ -# tool.test - Copyright (c) 2015 Sean Woods -# ------------------------------------------------------------------------- -set here [file dirname [file join [pwd] [info script]]] -source [file join $here .. .. .. tcllib modules devtools testutilities.tcl] -source [file join $here .. .. .. tcllib modules oodialect oodialect.tcl] -source [file join $here .. .. .. tcllib modules dicttool dicttool.tcl] -source [file join $here .. .. .. tcllib modules oometa oometa.tcl] -source [file join $here .. .. .. tcllib modules sha1 sha1.tcl] - -testsNeedTcl 8.6 -testsNeedTcltest 2 - -testsNeed TclOO 1 - -testing { - useLocal index.tcl tool -} - - -tool::class create OptionClass { - property color green - property mass 1200kg - option bodystyle {default: sedan} - option master {class organ default ::noop} -} - -tool::class create OptionClass2 { - superclass OptionClass - property mass 1400kg - option color {default: blue} -} - -OptionClass create ObjectOptionTest1 -OptionClass create ObjectOptionTest2 bodystyle wagon transmission standard -OptionClass2 create ObjectOptionTest3 -OptionClass2 create ObjectOptionTest4 bodystyle SUV transmission cvt color white - -### -# Property ignores options -### -test tool-options-001 {Simple property queries} { - ObjectOptionTest1 property color -} green - -test tool-options-002 {Simple property queries} { - ObjectOptionTest2 property color -} green - -test tool-options-003 {Simple property queries} { - ObjectOptionTest3 property color -} green - -test tool-options-004 {Simple property queries} { - ObjectOptionTest4 property color -} green - -### -# Cget consults the options -### -test tool-options-005 {Simple property queries} { - ObjectOptionTest1 cget color -} green - -test tool-options-006 {Simple property queries} { - ObjectOptionTest2 cget color -} green - -test tool-options-007 {Simple property queries} { - ObjectOptionTest3 cget color -} blue - -test tool-options-008 {Simple property queries} { - ObjectOptionTest4 cget color -} white - -### -# Tests with options in an object changing class -### -test tool-options-009 {Simple property queries} { - ObjectOptionTest3 property mass -} 1400kg - -ObjectOptionTest3 morph OptionClass -# The option for color was already set. It should remain -test tool-options-010 {Simple property queries} { - ObjectOptionTest3 cget color -} blue -# The "color" property on the other hand should revert -test tool-options-011 {Simple property queries} { - ObjectOptionTest3 property color -} green -# The "mass" property on the other hand should revert -test tool-options-012 {Simple property queries} { - ObjectOptionTest3 property mass -} 1200kg - -# Change a OptionClass to a OptionClass2 - -test tool-options-013 {Simple property queries} { - ObjectOptionTest2 property mass -} 1200kg - -ObjectOptionTest2 morph OptionClass2 -# When entering OptionClass2, the object will get any new options -test tool-options-014 {Simple property queries} { - ObjectOptionTest2 cget color -} blue - -test tool-options-015 {Simple property queries} { - ObjectOptionTest2 property mass -} 1400kg - -# When changing back, the set option remains -ObjectOptionTest2 morph OptionClass -test tool-options-016 {Simple property queries} { - ObjectOptionTest2 cget color -} blue - -test tool-options-017 {Simple property queries} { - ObjectOptionTest2 property mass -} 1200kg - - -tool::class create ArrayEnsembleClass { - # Burned in defaults - meta branchset define { - color: pink - } - - array_ensemble define define { - initialize { - foo bar - } - custom { - return custom - } - true { - return true - } - false { - return false - } - } -} - -ArrayEnsembleClass create ArrayEnsembleObject - -test tool-ensemble-001 {Test Array Ensemble} { - ArrayEnsembleObject define true -} true -test tool-ensemble-002 {Test Array Ensemble} { - ArrayEnsembleObject define false -} false -test tool-ensemble-003 {Test Array Ensemble retrieve initial value} { - ArrayEnsembleObject define get foo -} bar -test tool-ensemble-004 {Test Array Ensemble Store a value} { - ArrayEnsembleObject define set cc /usr/bin/cc - ArrayEnsembleObject define get cc -} /usr/bin/cc - -test tool-ensemble-005 {Test array add} { - ArrayEnsembleObject define add path /bin - ArrayEnsembleObject define get path -} /bin - -test tool-ensemble-005 {Test array add} { - ArrayEnsembleObject define add path /usr/bin - ArrayEnsembleObject define get path -} {/bin /usr/bin} - -test tool-ensemble-006 {Test array add (again)} { - ArrayEnsembleObject define add path /usr/bin - ArrayEnsembleObject define get path -} {/bin /usr/bin} - - -test tool-ensemble-007 {Test array lappend} { - ArrayEnsembleObject define lappend path /usr/bin - ArrayEnsembleObject define get path -} {/bin /usr/bin /usr/bin} - -test tool-ensemble-008 {Test array remove} { - ArrayEnsembleObject define remove path /usr/bin - ArrayEnsembleObject define get path -} {/bin} - -test tool-ensemble-009 {Test array exists} { - ArrayEnsembleObject define exists counter -} 0 - -test tool-ensemble-010 {Test array incr} { - ArrayEnsembleObject define incr counter - ArrayEnsembleObject define get counter -} 1 - -test tool-ensemble-011 {Test array incr} { - ArrayEnsembleObject define incr counter - ArrayEnsembleObject define get counter -} 2 - -test tool-ensemble-012 {Test array exists} { - ArrayEnsembleObject define exists counter -} 1 - -test tool-ensemble-013 {Test array reset} { - ArrayEnsembleObject define reset - lsort -stride 2 [ArrayEnsembleObject define dump] -} {color pink foo bar} - -tool::class create DictEnsembleClass { - # Burned in defaults - meta branchset define { - color: pink - } - - dict_ensemble define define { - initialize { - foo bar - } - custom { - return custom - } - true { - return true - } - false { - return false - } - } -} - -DictEnsembleClass create DictEnsembleObject - -test tool-ensemble-001 {Test Array Ensemble} { - DictEnsembleObject define true -} true -test tool-ensemble-002 {Test Array Ensemble} { - DictEnsembleObject define false -} false -test tool-ensemble-003 {Test Array Ensemble retrieve initial value} { - DictEnsembleObject define get foo -} bar -test tool-ensemble-004 {Test Array Ensemble Store a value} { - DictEnsembleObject define set cc /usr/bin/cc - DictEnsembleObject define get cc -} /usr/bin/cc - -test tool-ensemble-005 {Test array add} { - DictEnsembleObject define add path /bin - DictEnsembleObject define get path -} /bin - -test tool-ensemble-005 {Test array add} { - DictEnsembleObject define add path /usr/bin - DictEnsembleObject define get path -} {/bin /usr/bin} - -test tool-ensemble-006 {Test array add (again)} { - DictEnsembleObject define add path /usr/bin - DictEnsembleObject define get path -} {/bin /usr/bin} - - -test tool-ensemble-007 {Test array lappend} { - DictEnsembleObject define lappend path /usr/bin - DictEnsembleObject define get path -} {/bin /usr/bin /usr/bin} - -test tool-ensemble-008 {Test array remove} { - DictEnsembleObject define remove path /usr/bin - DictEnsembleObject define get path -} {/bin} - -test tool-ensemble-009 {Test array exists} { - DictEnsembleObject define exists counter -} 0 - -test tool-ensemble-010 {Test array incr} { - DictEnsembleObject define incr counter - DictEnsembleObject define get counter -} 1 - -test tool-ensemble-011 {Test array incr} { - DictEnsembleObject define incr counter - DictEnsembleObject define get counter -} 2 - -test tool-ensemble-012 {Test array exists} { - DictEnsembleObject define exists counter -} 1 - -test tool-ensemble-013 {Test array reset} { - DictEnsembleObject define reset - lsort -stride 2 [DictEnsembleObject define dump] -} {color pink foo bar} - - - - -test tool-option_class-001 {Test option class} { - ObjectOptionTest1 meta get option master -} {default: ::noop class: organ widget: label set-command: {my graft %field% %value%} get-command: {my organ %field%}} - -proc GNDN args { - return $args -} - -ObjectOptionTest1 configure master GNDN -test tool-option_class-002 {Test option class} { - ObjectOptionTest1 organ master -} GNDN - -test tool-option_class-003 {Test option class} { - ObjectOptionTest1 puts FOO -} {puts FOO} - -OptionClass2 create ObjectOptionTest5 bodystyle SUV transmission cvt color white master GNDN - -test tool-option_class-002 {Test option class} { - ObjectOptionTest5 organ master -} GNDN - -test tool-option_class-003 {Test option class} { - ObjectOptionTest5 puts FOO -} {puts FOO} -# ------------------------------------------------------------------------- - - -testsuiteCleanup - -# Local variables: -# mode: tcl -# indent-tabs-mode: nil +# tool.test - Copyright (c) 2015 Sean Woods +# ------------------------------------------------------------------------- + +source [file join \ + [file dirname [file dirname [file join [pwd] [info script]]]] \ + devtools testutilities.tcl] + +testsNeedTcl 8.6 +testsNeedTcltest 2 +testsNeed TclOO 1 + +support { + use oodialect/oodialect.tcl oo::dialect + use dicttool/dicttool.tcl dicttool + use oometa/oometa.tcl oo::meta + use sha1/sha1.tcl sha1 +} +testing { + useLocal index.tcl tool +} + +# ------------------------------------------------------------------------- + +tool::class create OptionClass { + property color green + property mass 1200kg + option bodystyle {default: sedan} + option master {class organ default ::noop} +} + +tool::class create OptionClass2 { + superclass OptionClass + property mass 1400kg + option color {default: blue} +} + +OptionClass create ObjectOptionTest1 +OptionClass create ObjectOptionTest2 bodystyle wagon transmission standard +OptionClass2 create ObjectOptionTest3 +OptionClass2 create ObjectOptionTest4 bodystyle SUV transmission cvt color white + +### +# Property ignores options +### +test tool-options-001 {Simple property queries} { + ObjectOptionTest1 property color +} green + +test tool-options-002 {Simple property queries} { + ObjectOptionTest2 property color +} green + +test tool-options-003 {Simple property queries} { + ObjectOptionTest3 property color +} green + +test tool-options-004 {Simple property queries} { + ObjectOptionTest4 property color +} green + +### +# Cget consults the options +### +test tool-options-005 {Simple property queries} { + ObjectOptionTest1 cget color +} green + +test tool-options-006 {Simple property queries} { + ObjectOptionTest2 cget color +} green + +test tool-options-007 {Simple property queries} { + ObjectOptionTest3 cget color +} blue + +test tool-options-008 {Simple property queries} { + ObjectOptionTest4 cget color +} white + +### +# Tests with options in an object changing class +### +test tool-options-009 {Simple property queries} { + ObjectOptionTest3 property mass +} 1400kg + +ObjectOptionTest3 morph OptionClass +# The option for color was already set. It should remain +test tool-options-010 {Simple property queries} { + ObjectOptionTest3 cget color +} blue +# The "color" property on the other hand should revert +test tool-options-011 {Simple property queries} { + ObjectOptionTest3 property color +} green +# The "mass" property on the other hand should revert +test tool-options-012 {Simple property queries} { + ObjectOptionTest3 property mass +} 1200kg + +# Change a OptionClass to a OptionClass2 + +test tool-options-013 {Simple property queries} { + ObjectOptionTest2 property mass +} 1200kg + +ObjectOptionTest2 morph OptionClass2 +# When entering OptionClass2, the object will get any new options +test tool-options-014 {Simple property queries} { + ObjectOptionTest2 cget color +} blue + +test tool-options-015 {Simple property queries} { + ObjectOptionTest2 property mass +} 1400kg + +# When changing back, the set option remains +ObjectOptionTest2 morph OptionClass +test tool-options-016 {Simple property queries} { + ObjectOptionTest2 cget color +} blue + +test tool-options-017 {Simple property queries} { + ObjectOptionTest2 property mass +} 1200kg + + +tool::class create ArrayEnsembleClass { + # Burned in defaults + meta branchset define { + color: pink + } + + array_ensemble define define { + initialize { + foo bar + } + custom { + return custom + } + true { + return true + } + false { + return false + } + } +} + +ArrayEnsembleClass create ArrayEnsembleObject + +test tool-ensemble-001 {Test Array Ensemble} { + ArrayEnsembleObject define true +} true +test tool-ensemble-002 {Test Array Ensemble} { + ArrayEnsembleObject define false +} false +test tool-ensemble-003 {Test Array Ensemble retrieve initial value} { + ArrayEnsembleObject define get foo +} bar +test tool-ensemble-004 {Test Array Ensemble Store a value} { + ArrayEnsembleObject define set cc /usr/bin/cc + ArrayEnsembleObject define get cc +} /usr/bin/cc + +test tool-ensemble-005 {Test array add} { + ArrayEnsembleObject define add path /bin + ArrayEnsembleObject define get path +} /bin + +test tool-ensemble-005 {Test array add} { + ArrayEnsembleObject define add path /usr/bin + ArrayEnsembleObject define get path +} {/bin /usr/bin} + +test tool-ensemble-006 {Test array add (again)} { + ArrayEnsembleObject define add path /usr/bin + ArrayEnsembleObject define get path +} {/bin /usr/bin} + + +test tool-ensemble-007 {Test array lappend} { + ArrayEnsembleObject define lappend path /usr/bin + ArrayEnsembleObject define get path +} {/bin /usr/bin /usr/bin} + +test tool-ensemble-008 {Test array remove} { + ArrayEnsembleObject define remove path /usr/bin + ArrayEnsembleObject define get path +} {/bin} + +test tool-ensemble-009 {Test array exists} { + ArrayEnsembleObject define exists counter +} 0 + +test tool-ensemble-010 {Test array incr} { + ArrayEnsembleObject define incr counter + ArrayEnsembleObject define get counter +} 1 + +test tool-ensemble-011 {Test array incr} { + ArrayEnsembleObject define incr counter + ArrayEnsembleObject define get counter +} 2 + +test tool-ensemble-012 {Test array exists} { + ArrayEnsembleObject define exists counter +} 1 + +test tool-ensemble-013 {Test array reset} { + ArrayEnsembleObject define reset + lsort -stride 2 [ArrayEnsembleObject define dump] +} {color pink foo bar} + +tool::class create DictEnsembleClass { + # Burned in defaults + meta branchset define { + color: pink + } + + dict_ensemble define define { + initialize { + foo bar + } + custom { + return custom + } + true { + return true + } + false { + return false + } + } +} + +DictEnsembleClass create DictEnsembleObject + +test tool-ensemble-001 {Test Array Ensemble} { + DictEnsembleObject define true +} true +test tool-ensemble-002 {Test Array Ensemble} { + DictEnsembleObject define false +} false +test tool-ensemble-003 {Test Array Ensemble retrieve initial value} { + DictEnsembleObject define get foo +} bar +test tool-ensemble-004 {Test Array Ensemble Store a value} { + DictEnsembleObject define set cc /usr/bin/cc + DictEnsembleObject define get cc +} /usr/bin/cc + +test tool-ensemble-005 {Test array add} { + DictEnsembleObject define add path /bin + DictEnsembleObject define get path +} /bin + +test tool-ensemble-005 {Test array add} { + DictEnsembleObject define add path /usr/bin + DictEnsembleObject define get path +} {/bin /usr/bin} + +test tool-ensemble-006 {Test array add (again)} { + DictEnsembleObject define add path /usr/bin + DictEnsembleObject define get path +} {/bin /usr/bin} + + +test tool-ensemble-007 {Test array lappend} { + DictEnsembleObject define lappend path /usr/bin + DictEnsembleObject define get path +} {/bin /usr/bin /usr/bin} + +test tool-ensemble-008 {Test array remove} { + DictEnsembleObject define remove path /usr/bin + DictEnsembleObject define get path +} {/bin} + +test tool-ensemble-009 {Test array exists} { + DictEnsembleObject define exists counter +} 0 + +test tool-ensemble-010 {Test array incr} { + DictEnsembleObject define incr counter + DictEnsembleObject define get counter +} 1 + +test tool-ensemble-011 {Test array incr} { + DictEnsembleObject define incr counter + DictEnsembleObject define get counter +} 2 + +test tool-ensemble-012 {Test array exists} { + DictEnsembleObject define exists counter +} 1 + +test tool-ensemble-013 {Test array reset} { + DictEnsembleObject define reset + lsort -stride 2 [DictEnsembleObject define dump] +} {color pink foo bar} + + + + +test tool-option_class-001 {Test option class} { + ObjectOptionTest1 meta get option master +} {default: ::noop class: organ widget: label set-command: {my graft %field% %value%} get-command: {my organ %field%}} + +proc GNDN args { + return $args +} + +ObjectOptionTest1 configure master GNDN +test tool-option_class-002 {Test option class} { + ObjectOptionTest1 organ master +} GNDN + +test tool-option_class-003 {Test option class} { + ObjectOptionTest1 puts FOO +} {puts FOO} + +OptionClass2 create ObjectOptionTest5 bodystyle SUV transmission cvt color white master GNDN + +test tool-option_class-002 {Test option class} { + ObjectOptionTest5 organ master +} GNDN + +test tool-option_class-003 {Test option class} { + ObjectOptionTest5 puts FOO +} {puts FOO} +# ------------------------------------------------------------------------- + + +testsuiteCleanup + +# Local variables: +# mode: tcl +# indent-tabs-mode: nil # End: Index: modules/uuid/pkgIndex.tcl ================================================================== --- modules/uuid/pkgIndex.tcl +++ modules/uuid/pkgIndex.tcl @@ -2,7 +2,7 @@ # # uuid package index file # # $Id: pkgIndex.tcl,v 1.3 2012/11/19 19:28:24 andreas_kupries Exp $ -if {![package vsatisfies [package provide Tcl] 8.2]} {return} +if {![package vsatisfies [package provide Tcl] 8.5]} {return} package ifneeded uuid 1.0.5 [list source [file join $dir uuid.tcl]] Index: modules/uuid/uuid.man ================================================================== --- modules/uuid/uuid.man +++ modules/uuid/uuid.man @@ -4,11 +4,11 @@ [keywords UUID] [moddesc {uuid}] [copyright {2004, Pat Thoyts }] [titledesc {UUID generation and comparison}] [category {Hashes, checksums, and encryption}] -[require Tcl 8.2] +[require Tcl 8.5] [require uuid [opt [vset UUID_VERSION]]] [description] [para] This package provides a generator of universally unique identifiers Index: modules/uuid/uuid.tcl ================================================================== --- modules/uuid/uuid.tcl +++ modules/uuid/uuid.tcl @@ -9,10 +9,12 @@ # http://www.globecom.net/ietf/draft/draft-kindel-uuid-uri-00.html # # Usage: uuid::uuid generate # uuid::uuid equal $idA $idB +package require Tcl 8.5 + namespace eval uuid { variable accel array set accel {critcl 0} namespace export uuid @@ -20,15 +22,10 @@ variable uid if {![info exists uid]} { set uid 1 } - if {[package vcompare [package provide Tcl] 8.4] < 0} { - package require struct::list - interp alias {} ::uuid::lset {} ::struct::list::lset - } - proc K {a b} {set a} } ### # Optimization Index: modules/uuid/uuid.test ================================================================== --- modules/uuid/uuid.test +++ modules/uuid/uuid.test @@ -6,11 +6,11 @@ source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] -testsNeedTcl 8.2 +testsNeedTcl 8.5 testsNeedTcltest 1.0 testing { useLocal uuid.tcl uuid } Index: modules/yaml/json2huddle.test ================================================================== --- modules/yaml/json2huddle.test +++ modules/yaml/json2huddle.test @@ -1,9 +1,8 @@ # -*- tcl -*- # json2huddle.test: tests for the huddle library. - if {[lsearch [namespace children] ::tcltest] == -1} { # single test set selfrun 1 set auto_path [linsert $auto_path 0 [pwd]] package require tcltest @@ -15,10 +14,11 @@ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.5 testsNeedTcltest 2 + testsNeed TclOO 1 support { use try/try.tcl try use try/throw.tcl throw use json/json.tcl json Index: support/devel/sak/doc/kwic.txt ================================================================== --- support/devel/sak/doc/kwic.txt +++ support/devel/sak/doc/kwic.txt @@ -1,11 +1,12 @@ [index_begin {Keyword Index} {}] [key .ddt] [manpage modules/docstrip/docstrip_util.man docstrip_util] [key .dtx] -[manpage modules/docstrip/docstrip.man docstrip] -[manpage apps/tcldocstrip.man tcldocstrip] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage apps/tcldocstrip.man tcldocstrip] [key /dev/null] [manpage modules/virtchannel_base/tcllib_null.man tcl::chan::null] [manpage modules/virtchannel_base/nullzero.man tcl::chan::nullzero] [key /dev/random] [manpage modules/virtchannel_base/tcllib_random.man tcl::chan::random] @@ -1574,12 +1575,13 @@ [manpage modules/doctools2toc/toc_msgcat_en.man doctools::msgcat::toc::en] [manpage modules/doctools2toc/toc_msgcat_fr.man doctools::msgcat::toc::fr] [key lambda] [manpage modules/lambda/lambda.man lambda] [key LaTeX] -[manpage modules/docstrip/docstrip.man docstrip] -[manpage apps/tcldocstrip.man tcldocstrip] +[manpage modules/docstrip/docstrip.man docstrip] +[manpage modules/docstrip/docstrip_util.man docstrip_util] +[manpage apps/tcldocstrip.man tcldocstrip] [key latex] [manpage modules/doctools2idx/idx_container.man doctools::idx] [manpage modules/doctools/docidx.man doctools::idx] [manpage modules/doctools2toc/toc_container.man doctools::toc] [manpage modules/doctools/doctoc.man doctools::toc] Index: support/installation/version.tcl ================================================================== --- support/installation/version.tcl +++ support/installation/version.tcl @@ -1,6 +1,6 @@ -package_version 1.17 +package_version 1.18 package_name tcllib dist_exclude config dist_exclude modules/ftp/example dist_exclude modules/ftpd/examples ADDED support/releases/history/README-1.18.txt Index: support/releases/history/README-1.18.txt ================================================================== --- /dev/null +++ support/releases/history/README-1.18.txt @@ -0,0 +1,263 @@ +Overview +======== + + 18 new packages in 14 modules + 32 changed packages in 22 modules + 24 internally changed packages in 18 modules + 357 unchanged packages in 97 modules + 438 packages, total in 126 modules, total + +New in tcllib 1.18 +================== + + Module Package New Version Comments + --------------- ------------------- ------------- ---------- + dicttool dicttool 1.0 + --------------- ------------------- ------------- ---------- + httpd httpd 4.0 + httpd::content 4.0 + httpd::dispatch 4.0 + scgi::app 0.1 + --------------- ------------------- ------------- ---------- + httpwget http::wget 0.1 + markdown Markdown 1.0 + math math::exact 1.0 + nns nameserv::cluster 0.2.3 + oodialect oo::dialect 0.3 + --------------- ------------------- ------------- ---------- + oometa oo::meta 0.4.1 + oo::option 0.3 + --------------- ------------------- ------------- ---------- + processman processman 0.3 + tool tool 0.5 + tool_datatype tool::datatype 0.1 + try throw 1 + yaml huddle::json 0.1 + zip zipfile::mkzip 1.2 + --------------- ------------------- ------------- ---------- + +Changes from tcllib 1.17 to 1.18 +================================ + + tcllib 1.17 tcllib 1.18 + Module Package Old Version New Version Comments + ----------- ------------------------- ------------- ------------- ---------- + cron cron 1.1 1.2.1 B EF + csv csv 0.8 0.8.1 B + ----------- ------------------------- ------------- ------------- ---------- + debug debug 1.0.5 1.0.6 B D EF + debug::caller 1 1.1 EF + ----------- ------------------------- ------------- ------------- ---------- + docstrip docstrip::util 1.3 1.3.1 B D + dtplite dtplite 1.2 1.3 B EF + ----------- ------------------------- ------------- ------------- ---------- + fileutil fileutil 1.14.10 1.15 B D EF T + fileutil::traverse 0.5 0.6 B D T + ----------- ------------------------- ------------- ------------- ---------- + ftp ftp::geturl 0.2.1 0.2.2 B + ftpd ftpd 1.2.6 1.3 B EF + htmlparse htmlparse 1.2.1 1.2.2 D EF T + imap4 imap4 0.5.2 0.5.3 D EF + irc picoirc 0.5.1 0.5.2 B D + map map::slippy::fetcher 0.3 0.4 D EF + ----------- ------------------------- ------------- ------------- ---------- + math math::calculus::symdiff 1.0 1.0.1 B T + math::constants 1.0.1 1.0.2 B D + math::statistics 0.9.3 B EF + math::statistics 1.0 B EF + ----------- ------------------------- ------------- ------------- ---------- + nettool nettool 0.4 0.5.1 B EF I + ooutil oo::util 1.2.1 1.2.2 B D T + ----------- ------------------------- ------------- ------------- ---------- + pt pt::pe::op 1 1.0.1 B D T + pt::peg::to::tclparam 1.0.2 1.0.3 B D T + pt::rde 1.0.3 1.1 B D I T + pt::rde::oo 1.0.3 1.1 D I + pt::util 1 1.1 B + ----------- ------------------------- ------------- ------------- ---------- + rest rest 1.0.1 1.0.2 B D + tie tie::std::rarray 1.0 1.0.1 B D T + uri uri 1.2.5 1.2.6 D EF T + uuid uuid 1.0.4 1.0.5 B I + ----------- ------------------------- ------------- ------------- ---------- + yaml huddle 0.1.5 0.2 D I T + yaml 0.3.7 0.3.9 D I T + ----------- ------------------------- ------------- ------------- ---------- + zip zipfile::decode 0.6.1 0.7 EF I + zipfile::encode 0.3 0.4 B D + ----------- ------------------------- ------------- ------------- ---------- + +Invisible changes (documentation, testsuites) +============================================= + + tcllib 1.17 tcllib 1.18 + Module Package Old Version New Version Comments + ------------- -------------------- ------------- ------------- ---------- + base64 uuencode 1.1.5 1.1.5 I + yencode 1.1.3 1.1.3 I + ------------- -------------------- ------------- ------------- ---------- + crc crc32 1.3.2 1.3.2 I + sum 1.1.2 1.1.2 I + ------------- -------------------- ------------- ------------- ---------- + dns spf 1.1.1 1.1.1 I + docstrip docstrip 1.2 1.2 D + ------------- -------------------- ------------- ------------- ---------- + doctools doctools 1.4.19 1.4.19 EF + doctools::idx 1.0.5 1.0.5 EF + doctools::idx 2 2 EF + doctools::toc 1.1.4 1.1.4 EF + doctools::toc 2 2 EF + ------------- -------------------- ------------- ------------- ---------- + gpx gpx 1 1 T + json json 1.3.3 1.3.3 B + ldap ldapx 1.0 1.0 D + math math::special 0.3.0 0.3.0 D + md4 md4 1.0.6 1.0.6 I + ------------- -------------------- ------------- ------------- ---------- + md5 md5 1.4.4 1.4.4 I + md5 2.0.7 2.0.7 I + ------------- -------------------- ------------- ------------- ---------- + multiplexer multiplexer 0.2 0.2 T + nns nameserv::auto 0.3 0.3 D + processman odie::processman 0.3 0.3 B I + rc4 rc4 1.1.0 1.1.0 T + ------------- -------------------- ------------- ------------- ---------- + ripemd ripemd128 1.0.5 1.0.5 I + ripemd160 1.0.5 1.0.5 I + ------------- -------------------- ------------- ------------- ---------- + sha1 sha1 1.1.1 1.1.1 I + sha1 2.0.3 2.0.3 I + sha256 1.0.3 1.0.3 I + ------------- -------------------- ------------- ------------- ---------- + textutil textutil::expander 1.3.1 1.3.1 I + ------------- -------------------- ------------- ------------- ---------- + +Unchanged +========= + + aes, ascii85, asn, autoproxy, base32, base32::core, base32::hex, + base64, bee, bench, bench::in, bench::out::csv, + bench::out::text, bibtex, blowfish, cache::async, calendar, + char, cksum, clock::iso8601, clock::rfc2822, cmdline, comm, + configuration, control, coroutine, coroutine::auto, counter, + crc16, debug::heartbeat, debug::timestamp, des, dns, + doctools::changelog, doctools::config, doctools::cvs, + doctools::html, doctools::html::cssdefaults, doctools::idx, + doctools::idx::export, doctools::idx::export::docidx, + doctools::idx::export::html, doctools::idx::export::json, + doctools::idx::export::nroff, doctools::idx::export::text, + doctools::idx::export::wiki, doctools::idx::import, + doctools::idx::import::docidx, doctools::idx::import::json, + doctools::idx::parse, doctools::idx::structure, + doctools::msgcat, doctools::msgcat::idx::c, + doctools::msgcat::idx::de, doctools::msgcat::idx::en, + doctools::msgcat::idx::fr, doctools::msgcat::toc::c, + doctools::msgcat::toc::de, doctools::msgcat::toc::en, + doctools::msgcat::toc::fr, doctools::nroff::man_macros, + doctools::paths, doctools::tcl::parse, doctools::text, + doctools::toc, doctools::toc::export, + doctools::toc::export::doctoc, doctools::toc::export::html, + doctools::toc::export::json, doctools::toc::export::nroff, + doctools::toc::export::text, doctools::toc::export::wiki, + doctools::toc::import, doctools::toc::import::doctoc, + doctools::toc::import::json, doctools::toc::parse, + doctools::toc::structure, exif, fileutil::decode, + fileutil::magic::cfront, fileutil::magic::cgen, + fileutil::magic::filetype, fileutil::magic::mimetype, + fileutil::magic::rt, fileutil::multi, fileutil::multi::op, ftp, + generator, grammar::aycock, grammar::aycock::debug, + grammar::aycock::runtime, grammar::fa, grammar::fa::dacceptor, + grammar::fa::dexec, grammar::fa::op, grammar::me::cpu, + grammar::me::cpu::core, grammar::me::cpu::gasm, + grammar::me::tcl, grammar::me::util, grammar::peg, + grammar::peg::interp, hook, html, ident, inifile, interp, + interp::delegate::method, interp::delegate::proc, ip, irc, + javascript, jpeg, json::write, lambda, ldap, log, logger, + logger::appender, logger::utils, map::geocode::nominatim, + map::slippy, map::slippy::cache, mapproj, math, math::bigfloat, + math::bignum, math::calculus, math::complexnumbers, + math::decimal, math::fourier, math::fuzzy, math::geometry, + math::interpolate, math::linearalgebra, math::machineparameters, + math::numtheory, math::optimize, math::polynomials, + math::rationalfunctions, math::roman, md5crypt, mime, nameserv, + nameserv::common, nameserv::server, namespacex, ncgi, nmea, + nntp, oauth, otp, page::analysis::peg::emodes, + page::analysis::peg::minimize, page::analysis::peg::reachable, + page::analysis::peg::realizable, page::compiler::peg::mecpu, + page::config::peg, page::gen::peg::canon, page::gen::peg::cpkg, + page::gen::peg::hb, page::gen::peg::me, page::gen::peg::mecpu, + page::gen::peg::ser, page::gen::tree::text, page::parse::lemon, + page::parse::peg, page::parse::peghb, page::parse::pegser, + page::pluginmgr, page::reader::hb, page::reader::lemon, + page::reader::peg, page::reader::ser, page::reader::treeser, + page::transform::mecpu, page::transform::reachable, + page::transform::realizable, page::util::flow, + page::util::norm::lemon, page::util::norm::peg, page::util::peg, + page::util::quote, page::writer::hb, page::writer::identity, + page::writer::me, page::writer::mecpu, page::writer::null, + page::writer::peg, page::writer::ser, page::writer::tpc, + page::writer::tree, paths, pki, pluginmgr, png, pop3, pop3d, + pop3d::dbox, pop3d::udb, profiler, pt::ast, + pt::cparam::configuration::critcl, + pt::cparam::configuration::tea, pt::parse::peg, pt::pe, pt::peg, + pt::peg::container, pt::peg::container::peg, pt::peg::export, + pt::peg::export::container, pt::peg::export::json, + pt::peg::export::peg, pt::peg::from::json, pt::peg::from::peg, + pt::peg::import, pt::peg::import::json, pt::peg::import::peg, + pt::peg::interp, pt::peg::op, pt::peg::to::container, + pt::peg::to::cparam, pt::peg::to::json, pt::peg::to::param, + pt::peg::to::peg, pt::pgen, pt::tclparam::configuration::snit, + pt::tclparam::configuration::tcloo, rcs, report, resolv, S3, + SASL, SASL::NTLM, SASL::SCRAM, SASL::XGoogleToken, + simulation::annealing, simulation::montecarlo, + simulation::random, smtp, smtpd, snit, soundex, stooop, + string::token, string::token::shell, stringprep, + stringprep::data, struct, struct::disjointset, struct::graph, + struct::graph::op, struct::list, struct::matrix, struct::pool, + struct::prioqueue, struct::queue, struct::record, struct::set, + struct::skiplist, struct::stack, struct::tree, switched, tar, + tcl::chan::cat, tcl::chan::core, tcl::chan::events, + tcl::chan::facade, tcl::chan::fifo, tcl::chan::fifo2, + tcl::chan::halfpipe, tcl::chan::memchan, tcl::chan::null, + tcl::chan::nullzero, tcl::chan::random, tcl::chan::std, + tcl::chan::string, tcl::chan::textwindow, tcl::chan::variable, + tcl::chan::zero, tcl::randomseed, tcl::transform::adler32, + tcl::transform::base64, tcl::transform::core, + tcl::transform::counter, tcl::transform::crc32, + tcl::transform::hex, tcl::transform::identity, + tcl::transform::limitsize, tcl::transform::observe, + tcl::transform::otp, tcl::transform::rot, + tcl::transform::spacer, tcl::transform::zlib, tclDES, tclDESjr, + tepam, tepam::doc_gen, term, term::ansi::code, + term::ansi::code::attr, term::ansi::code::ctrl, + term::ansi::code::macros, term::ansi::ctrl::unix, + term::ansi::send, term::interact::menu, term::interact::pager, + term::receive, term::receive::bind, term::send, text::write, + textutil, textutil::adjust, textutil::repeat, textutil::split, + textutil::string, textutil::tabify, textutil::trim, tie, + tie::std::array, tie::std::dsource, tie::std::file, + tie::std::growfile, tie::std::log, tiff, time, + transfer::connect, transfer::copy, transfer::copy::queue, + transfer::data::destination, transfer::data::source, + transfer::receiver, transfer::transmitter, treeql, try, uevent, + uevent::onidle, unicode, unicode::data, units, uri::urn, + valtype::common, valtype::creditcard::amex, + valtype::creditcard::discover, valtype::creditcard::mastercard, + valtype::creditcard::visa, valtype::gs1::ean13, valtype::iban, + valtype::imei, valtype::isbn, valtype::luhn, valtype::luhn5, + valtype::usnpi, valtype::verhoeff, websocket, wip, xsxp + +Legend Change Details Comments + ------ ------- --------- + Major API: ** incompatible ** API changes. + + Minor EF : Extended functionality, API. + I : Major rewrite, but no API change + + Patch B : Bug fixes. + EX : New examples. + P : Performance enhancement. + + None T : Testsuite changes. + D : Documentation updates. + Index: tcllib.spec ================================================================== --- tcllib.spec +++ tcllib.spec @@ -1,8 +1,8 @@ # $Id: package_rpm.txt,v 1.1 2006/07/01 03:16:57 andreas_kupries Exp $ -%define version 1.17 +%define version 1.18 %define directory /usr Summary: The standard Tcl library Name: tcllib Version: %{version} Index: tcllib.tap ================================================================== --- tcllib.tap +++ tcllib.tap @@ -1,14 +1,14 @@ format {TclDevKit Project File} fmtver 2.0 fmttool {TclDevKit TclApp PackageDefinition} 2.5 -## Saved at : Wed Apr 29 21:17:45 PDT 2015 +## Saved at : Sat Jan 23 14:55:13 PST 2016 ## By : aku ## ## Generated by "sak.tcl tap" -## of tcllib 1.17 +## of tcllib 1.18 ######## ##### ### ## @@ -15,11 +15,11 @@ # # ############### # Complete bundle -Package {tcllib 1.17} +Package {tcllib 1.18} Base @TAP_DIR@ Platform * Desc {Tcllib: Bundle of all packages} Path pkgIndex.tcl Path aes @@ -42,10 +42,11 @@ Path crc Path cron Path csv Path debug Path des +Path dicttool Path dns Path docstrip Path doctools Path doctools2base Path doctools2idx @@ -61,13 +62,15 @@ Path grammar_aycock Path grammar_fa Path grammar_me Path grammar_peg Path hook +Path http +Path httpd +Path httpwget Path html Path htmlparse -Path http Path ident Path imap4 Path inifile Path interp Path irc @@ -75,10 +78,11 @@ Path jpeg Path json Path lambda Path ldap Path log +Path markdown Path map Path mapproj Path math Path md4 Path md5 @@ -91,10 +95,12 @@ Path nmea Path nns Path nntp Path ntp Path oauth +Path oodialect +Path oometa Path ooutil Path otp Path page Path pki Path pluginmgr @@ -123,10 +129,12 @@ Path tepam Path term Path textutil Path tie Path tiff +Path tool +Path tool_datatype Path transfer Path treeql Path try Path uev Path units @@ -200,12 +208,12 @@ # ############ # ############### # Module "base32" # [1] | "base32" (0.1) -# [2] | "base32::core" (0.1) -# [3] | "base32::hex" (0.1) +# [2] | "base32::hex" (0.1) +# [3] | "base32::core" (0.1) # -------+ Package {__base32 0.0} Platform * Desc {Base32 encoding} @@ -223,20 +231,20 @@ Package {base32 0.1} See __base32 Platform * Desc {base32 standard encoding} +Package {base32::hex 0.1} +See __base32 +Platform * +Desc {base32 extended hex encoding} + Package {base32::core 0.1} See __base32 Platform * Desc {Expanding basic base32 maps} -Package {base32::hex 0.1} -See __base32 -Platform * -Desc {base32 extended hex encoding} - # # ############### # ############### # Module "base64" @@ -449,11 +457,11 @@ # [1] | "comm" (4.6.3.1) # -------+ Package {comm 4.6.3.1} Platform * -Desc {A remote communication facility for Tcl (8.3 and later)} +Desc {The comm wire protocol} Base @TAP_DIR@/comm Path comm.tcl Path pkgIndex.tcl # @@ -464,11 +472,11 @@ # [1] | "control" (0.1.3) # -------+ Package {control 0.1.3} Platform * -Desc {Iterative directory traversal} +Desc {Procedures for control flow structures.} Base @TAP_DIR@/control Path ascaller.tcl Path assert.tcl Path control.tcl Path do.tcl @@ -565,14 +573,14 @@ # # ############ # ############# # Module "cron" -# [1] | "cron" (1.1) +# [1] | "cron" (1.2.1) # -------+ -Package {cron 1.1} +Package {cron 1.2.1} Platform * Desc {Tool for automating the period callback of commands} Base @TAP_DIR@/cron Path cron.tcl Path pkgIndex.tcl @@ -580,14 +588,14 @@ # # ############# # ############ # Module "csv" -# [1] | "csv" (0.8) +# [1] | "csv" (0.8.1) # -------+ -Package {csv 0.8} +Package {csv 0.8.1} Platform * Desc {Procedures to handle CSV data.} Base @TAP_DIR@/csv Path csv.tcl Path pkgIndex.tcl @@ -595,12 +603,12 @@ # # ############ # ############## # Module "debug" -# [1] | "debug::caller" (1) -# [2] | "debug" (1.0.5) +# [1] | "debug::caller" (1.1) +# [2] | "debug" (1.0.6) # [3] | "debug::heartbeat" (1) # [4] | "debug::timestamp" (1) # -------+ Package {__debug 0.0} @@ -612,16 +620,16 @@ Path debug.tcl Path heartbeat.tcl Path pkgIndex.tcl Path timestamp.tcl -Package {debug::caller 1} +Package {debug::caller 1.1} See __debug Platform * Desc {debug narrative - caller} -Package {debug 1.0.5} +Package {debug 1.0.6} See __debug Platform * Desc {debug narrative - core} Package {debug::heartbeat 1} @@ -638,12 +646,12 @@ # ############## # ############ # Module "des" # [1] | "des" (1.1.0) -# [2] | "tclDESjr" (1.0.0) -# [3] | "tclDES" (1.0.0) +# [2] | "tclDES" (1.0.0) +# [3] | "tclDESjr" (1.0.0) # -------+ Package {__des 0.0} Platform * Desc {Data Encryption Standard (DES)} @@ -657,27 +665,42 @@ Package {des 1.1.0} See __des Platform * Desc {Implementation of the DES and triple-DES ciphers} -Package {tclDESjr 1.0.0} +Package {tclDES 1.0.0} See __des Platform * Desc {Implementation of the DES and triple-DES ciphers} -Package {tclDES 1.0.0} +Package {tclDESjr 1.0.0} See __des Platform * Desc {Implementation of the DES and triple-DES ciphers} # # ############ +# ################# +# Module "dicttool" +# [1] | "dicttool" (1.0) +# -------+ + +Package {dicttool 1.0} +Platform * +Desc {Dictionary Tools} +Base @TAP_DIR@/dicttool +Path dicttool.tcl +Path pkgIndex.tcl + +# +# ################# + # ############ # Module "dns" -# [1] | "dns" (1.3.5) -# [2] | "spf" (1.1.1) +# [1] | "spf" (1.1.1) +# [2] | "dns" (1.3.5) # [3] | "ip" (1.3) # [4] | "resolv" (1.0.3) # -------+ Package {__dns 0.0} @@ -692,20 +715,20 @@ Path msgs/en.msg Path pkgIndex.tcl Path resolv.tcl Path spf.tcl +Package {spf 1.1.1} +See __dns +Platform * +Desc {Tcllib package} + Package {dns 1.3.5} See __dns Platform * Desc {Tcl Domain Name Service Client} -Package {spf 1.1.1} -See __dns -Platform * -Desc {Tcllib package} - Package {ip 1.3} See __dns Platform * Desc {IPv4 and IPv6 address manipulation} @@ -718,11 +741,11 @@ # ############ # ################# # Module "docstrip" # [1] | "docstrip" (1.2) -# [2] | "docstrip::util" (1.3) +# [2] | "docstrip::util" (1.3.1) # -------+ Package {__docstrip 0.0} Platform * Desc {Literate programming tool} @@ -733,13 +756,13 @@ Path pkgIndex.tcl Package {docstrip 1.2} See __docstrip Platform * -Desc {Docstrip-related utilities} +Desc {Docstrip style source code extraction} -Package {docstrip::util 1.3} +Package {docstrip::util 1.3.1} See __docstrip Platform * Desc {Docstrip-related utilities} # @@ -747,13 +770,13 @@ # ################# # Module "doctools" # [1] | "doctools::idx" (1.0.5) # [2] | "doctools::toc" (1.1.4) -# [3] | "doctools" (1.4.19) -# [4] | "doctools::changelog" (1.1) -# [5] | "doctools::cvs" (1) +# [3] | "doctools::changelog" (1.1) +# [4] | "doctools::cvs" (1) +# [5] | "doctools" (1.4.19) # -------+ Package {__doctools 0.0} Platform * Desc {Documentation tools} @@ -810,16 +833,11 @@ Desc {docidx - Processing indices} Package {doctools::toc 1.1.4} See __doctools Platform * -Desc {Holding tables of contents} - -Package {doctools 1.4.19} -See __doctools -Platform * -Desc {doctools - Processing documents} +Desc {doctoc - Processing tables of contents} Package {doctools::changelog 1.1} See __doctools Platform * Desc {Processing text in Emacs ChangeLog format} @@ -827,20 +845,25 @@ Package {doctools::cvs 1} See __doctools Platform * Desc {Processing text in 'cvs log' format} +Package {doctools 1.4.19} +See __doctools +Platform * +Desc {doctools - Processing documents} + # # ################# # ###################### # Module "doctools2base" -# [1] | "doctools::html" (0.1) -# [2] | "doctools::text" (0.1) -# [3] | "doctools::config" (0.1) +# [1] | "doctools::text" (0.1) +# [2] | "doctools::html" (0.1) +# [3] | "doctools::html::cssdefaults" (0.1) # [4] | "doctools::tcl::parse" (0.1) -# [5] | "doctools::html::cssdefaults" (0.1) +# [5] | "doctools::config" (0.1) # [6] | "doctools::msgcat" (0.1) # [7] | "doctools::nroff::man_macros" (0.1) # [8] | "doctools::paths" (0.1) # -------+ @@ -857,34 +880,34 @@ Path paths.tcl Path pkgIndex.tcl Path tcl_parse.tcl Path text.tcl -Package {doctools::html 0.1} -See __doctools2base -Platform * -Desc {Tcllib package} - Package {doctools::text 0.1} See __doctools2base Platform * Desc {Tcllib package} -Package {doctools::config 0.1} +Package {doctools::html 0.1} +See __doctools2base +Platform * +Desc {Tcllib package} + +Package {doctools::html::cssdefaults 0.1} See __doctools2base Platform * -Desc {Tcllib package} +Desc {Default CSS style for HTML export plugins} Package {doctools::tcl::parse 0.1} See __doctools2base Platform * Desc {Processing text in 'subst -novariables' format} -Package {doctools::html::cssdefaults 0.1} +Package {doctools::config 0.1} See __doctools2base Platform * -Desc {Default CSS style for HTML export plugins} +Desc {Tcllib package} Package {doctools::msgcat 0.1} See __doctools2base Platform * Desc {Message catalog management for the various document parsers} @@ -902,22 +925,22 @@ # # ###################### # ##################### # Module "doctools2idx" -# [1] | "doctools::idx::export::nroff" (0.3) +# [1] | "doctools::idx::import::json" (0.1) # [2] | "doctools::idx::structure" (0.1) -# [3] | "doctools::idx::import::json" (0.1) +# [3] | "doctools::idx::export::nroff" (0.3) # [4] | "doctools::idx::import::docidx" (0.1) # [5] | "doctools::idx::export" (0.1) -# [6] | "doctools::idx::parse" (0.1) +# [6] | "doctools::idx::export::html" (0.2) # [7] | "doctools::msgcat::idx::fr" (0.1) -# [8] | "doctools::idx::export::html" (0.2) -# [9] | "doctools::idx" (2) -# [10] | "doctools::msgcat::idx::de" (0.1) -# [11] | "doctools::msgcat::idx::en" (0.1) -# [12] | "doctools::msgcat::idx::c" (0.1) +# [8] | "doctools::idx::parse" (0.1) +# [9] | "doctools::msgcat::idx::de" (0.1) +# [10] | "doctools::idx" (2) +# [11] | "doctools::msgcat::idx::c" (0.1) +# [12] | "doctools::msgcat::idx::en" (0.1) # [13] | "doctools::idx::export::json" (0.1) # [14] | "doctools::idx::export::docidx" (0.1) # [15] | "doctools::idx::export::wiki" (0.2) # [16] | "doctools::idx::export::text" (0.2) # [17] | "doctools::idx::import" (0.1) @@ -945,24 +968,24 @@ Path msgcat_fr.tcl Path parse.tcl Path pkgIndex.tcl Path structure.tcl -Package {doctools::idx::export::nroff 0.3} +Package {doctools::idx::import::json 0.1} See __doctools2idx Platform * -Desc {nroff export plugin} +Desc {JSON import plugin} Package {doctools::idx::structure 0.1} See __doctools2idx Platform * Desc {Docidx serialization utilities} -Package {doctools::idx::import::json 0.1} +Package {doctools::idx::export::nroff 0.3} See __doctools2idx Platform * -Desc {JSON import plugin} +Desc {nroff export plugin} Package {doctools::idx::import::docidx 0.1} See __doctools2idx Platform * Desc {docidx import plugin} @@ -970,45 +993,45 @@ Package {doctools::idx::export 0.1} See __doctools2idx Platform * Desc {Exporting keyword indices} -Package {doctools::idx::parse 0.1} +Package {doctools::idx::export::html 0.2} See __doctools2idx Platform * -Desc {Parsing text in docidx format} +Desc {HTML export plugin} Package {doctools::msgcat::idx::fr 0.1} See __doctools2idx Platform * Desc {Message catalog for the docidx parser (FR)} -Package {doctools::idx::export::html 0.2} +Package {doctools::idx::parse 0.1} +See __doctools2idx +Platform * +Desc {Parsing text in docidx format} + +Package {doctools::msgcat::idx::de 0.1} See __doctools2idx Platform * -Desc {HTML export plugin} +Desc {Message catalog for the docidx parser (DE)} Package {doctools::idx 2} See __doctools2idx Platform * Desc {docidx - Processing indices} -Package {doctools::msgcat::idx::de 0.1} +Package {doctools::msgcat::idx::c 0.1} See __doctools2idx Platform * -Desc {Message catalog for the docidx parser (DE)} +Desc {Message catalog for the docidx parser (C)} Package {doctools::msgcat::idx::en 0.1} See __doctools2idx Platform * Desc {Message catalog for the docidx parser (EN)} -Package {doctools::msgcat::idx::c 0.1} -See __doctools2idx -Platform * -Desc {Message catalog for the docidx parser (C)} - Package {doctools::idx::export::json 0.1} See __doctools2idx Platform * Desc {JSON export plugin} @@ -1035,28 +1058,28 @@ # # ##################### # ##################### # Module "doctools2toc" -# [1] | "doctools::msgcat::toc::fr" (0.1) -# [2] | "doctools::toc::export::html" (0.1) -# [3] | "doctools::toc" (2) -# [4] | "doctools::msgcat::toc::de" (0.1) +# [1] | "doctools::toc::export::html" (0.1) +# [2] | "doctools::msgcat::toc::fr" (0.1) +# [3] | "doctools::msgcat::toc::de" (0.1) +# [4] | "doctools::toc" (2) # [5] | "doctools::msgcat::toc::en" (0.1) # [6] | "doctools::toc::export::json" (0.1) -# [7] | "doctools::toc::export::nroff" (0.2) -# [8] | "doctools::toc::structure" (0.1) +# [7] | "doctools::toc::structure" (0.1) +# [8] | "doctools::toc::export::nroff" (0.2) # [9] | "doctools::toc::export::wiki" (0.1) # [10] | "doctools::toc::import::doctoc" (0.1) # [11] | "doctools::toc::export::text" (0.1) -# [12] | "doctools::toc::parse" (0.1) -# [13] | "doctools::toc::import" (0.1) +# [12] | "doctools::toc::import" (0.1) +# [13] | "doctools::toc::parse" (0.1) # [14] | "doctools::msgcat::toc::c" (0.1) # [15] | "dict" (1) # [16] | "doctools::toc::import::json" (0.1) -# [17] | "doctools::toc::export::doctoc" (0.1) -# [18] | "doctools::toc::export" (0.1) +# [17] | "doctools::toc::export" (0.1) +# [18] | "doctools::toc::export::doctoc" (0.1) # -------+ Package {__doctools2toc 0.0} Platform * Desc {Documentation tools} @@ -1079,30 +1102,30 @@ Path msgcat_fr.tcl Path parse.tcl Path pkgIndex.tcl Path structure.tcl -Package {doctools::msgcat::toc::fr 0.1} -See __doctools2toc -Platform * -Desc {Message catalog for the doctoc parser (FR)} - Package {doctools::toc::export::html 0.1} See __doctools2toc Platform * Desc {HTML export plugin} -Package {doctools::toc 2} +Package {doctools::msgcat::toc::fr 0.1} See __doctools2toc Platform * -Desc {Holding tables of contents} +Desc {Message catalog for the doctoc parser (FR)} Package {doctools::msgcat::toc::de 0.1} See __doctools2toc Platform * Desc {Message catalog for the doctoc parser (DE)} +Package {doctools::toc 2} +See __doctools2toc +Platform * +Desc {doctoc - Processing tables of contents} + Package {doctools::msgcat::toc::en 0.1} See __doctools2toc Platform * Desc {Message catalog for the doctoc parser (EN)} @@ -1109,20 +1132,20 @@ Package {doctools::toc::export::json 0.1} See __doctools2toc Platform * Desc {JSON export plugin} +Package {doctools::toc::structure 0.1} +See __doctools2toc +Platform * +Desc {Doctoc serialization utilities} + Package {doctools::toc::export::nroff 0.2} See __doctools2toc Platform * Desc {nroff export plugin} -Package {doctools::toc::structure 0.1} -See __doctools2toc -Platform * -Desc {Doctoc serialization utilities} - Package {doctools::toc::export::wiki 0.1} See __doctools2toc Platform * Desc {wiki export plugin} @@ -1134,20 +1157,20 @@ Package {doctools::toc::export::text 0.1} See __doctools2toc Platform * Desc {plain text export plugin} +Package {doctools::toc::import 0.1} +See __doctools2toc +Platform * +Desc {Importing keyword indices} + Package {doctools::toc::parse 0.1} See __doctools2toc Platform * Desc {Parsing text in doctoc format} -Package {doctools::toc::import 0.1} -See __doctools2toc -Platform * -Desc {Importing keyword indices} - Package {doctools::msgcat::toc::c 0.1} See __doctools2toc Platform * Desc {Message catalog for the doctoc parser (C)} @@ -1159,29 +1182,29 @@ Package {doctools::toc::import::json 0.1} See __doctools2toc Platform * Desc {JSON import plugin} +Package {doctools::toc::export 0.1} +See __doctools2toc +Platform * +Desc {Exporting tables of contents} + Package {doctools::toc::export::doctoc 0.1} See __doctools2toc Platform * Desc {doctoc export plugin} -Package {doctools::toc::export 0.1} -See __doctools2toc -Platform * -Desc {Exporting tables of contents} - # # ##################### # ################ # Module "dtplite" -# [1] | "dtplite" (1.2) +# [1] | "dtplite" (1.3) # -------+ -Package {dtplite 1.2} +Package {dtplite 1.3} Platform * Desc {Lightweight DocTools Markup Processor} Base @TAP_DIR@/dtplite Path dtplite.tcl Path pkgIndex.tcl @@ -1206,18 +1229,18 @@ # ################# # Module "fileutil" # [1] | "fileutil::multi::op" (0.5.3) # [2] | "fileutil::multi" (0.1) -# [3] | "fileutil::traverse" (0.5) -# [4] | "fileutil" (1.14.10) -# [5] | "fileutil::decode" (0.2) +# [3] | "fileutil::decode" (0.2) +# [4] | "fileutil" (1.15) +# [5] | "fileutil::traverse" (0.6) # -------+ Package {__fileutil 0.0} Platform * -Desc {file utilities} +Desc {file utilities, Parser generator tools} Hidden Base @TAP_DIR@/fileutil Path decode.tcl Path fileutil.tcl Path multi.tcl @@ -1233,31 +1256,31 @@ Package {fileutil::multi 0.1} See __fileutil Platform * Desc {Multi-file operation, scatter/gather, standard object} -Package {fileutil::traverse 0.5} -See __fileutil -Platform * -Desc {Iterative directory traversal} - -Package {fileutil 1.14.10} -See __fileutil -Platform * -Desc {Procedures implementing some file utilities} - Package {fileutil::decode 0.2} See __fileutil Platform * Desc {Tcllib package} +Package {fileutil 1.15} +See __fileutil +Platform * +Desc {page plugin manager} + +Package {fileutil::traverse 0.6} +See __fileutil +Platform * +Desc {Iterative directory traversal} + # # ################# # ############ # Module "ftp" -# [1] | "ftp::geturl" (0.2.1) +# [1] | "ftp::geturl" (0.2.2) # [2] | "ftp" (2.4.13) # -------+ Package {__ftp 0.0} Platform * @@ -1266,11 +1289,11 @@ Base @TAP_DIR@/ftp Path ftp.tcl Path ftp_geturl.tcl Path pkgIndex.tcl -Package {ftp::geturl 0.2.1} +Package {ftp::geturl 0.2.2} See __ftp Platform * Desc {Uri handler for ftp urls} Package {ftp 2.4.13} @@ -1281,14 +1304,14 @@ # # ############ # ############# # Module "ftpd" -# [1] | "ftpd" (1.2.6) +# [1] | "ftpd" (1.3) # -------+ -Package {ftpd 1.2.6} +Package {ftpd 1.3} Platform * Desc {Tcl FTP server implementation} Base @TAP_DIR@/ftpd Path ftpd.tcl Path pkgIndex.tcl @@ -1298,12 +1321,12 @@ # ################ # Module "fumagic" # [1] | "fileutil::magic::cgen" (1.0) # [2] | "fileutil::magic::mimetype" (1.0.2) -# [3] | "fileutil::magic::filetype" (1.0.2) -# [4] | "fileutil::magic::rt" (1.0) +# [3] | "fileutil::magic::rt" (1.0) +# [4] | "fileutil::magic::filetype" (1.0.2) # [5] | "fileutil::magic::cfront" (1.0) # -------+ Package {__fumagic 0.0} Platform * @@ -1325,20 +1348,20 @@ Package {fileutil::magic::mimetype 1.0.2} See __fumagic Platform * Desc {Procedures implementing mime-type recognition} +Package {fileutil::magic::rt 1.0} +See __fumagic +Platform * +Desc {Runtime core for file type recognition engines written in pure Tcl} + Package {fileutil::magic::filetype 1.0.2} See __fumagic Platform * Desc {Procedures implementing file-type recognition} -Package {fileutil::magic::rt 1.0} -See __fumagic -Platform * -Desc {Runtime core for file type recognition engines written in pure Tcl} - Package {fileutil::magic::cfront 1.0} See __fumagic Platform * Desc {Generator core for compiler of magic(5) files} @@ -1412,12 +1435,12 @@ # ################### # Module "grammar_fa" # [1] | "grammar::fa::op" (0.4.1) # [2] | "grammar::fa" (0.5) -# [3] | "grammar::fa::dexec" (0.2) -# [4] | "grammar::fa::dacceptor" (0.1.1) +# [3] | "grammar::fa::dacceptor" (0.1.1) +# [4] | "grammar::fa::dexec" (0.2) # -------+ Package {__grammar_fa 0.0} Platform * Desc {Finite automaton operations and usage} @@ -1437,28 +1460,28 @@ Package {grammar::fa 0.5} See __grammar_fa Platform * Desc {Create and manipulate finite automatons} +Package {grammar::fa::dacceptor 0.1.1} +See __grammar_fa +Platform * +Desc {Create and use deterministic acceptors} + Package {grammar::fa::dexec 0.2} See __grammar_fa Platform * Desc {Execute deterministic finite automatons} -Package {grammar::fa::dacceptor 0.1.1} -See __grammar_fa -Platform * -Desc {Create and use deterministic acceptors} - # # ################### # ################### # Module "grammar_me" # [1] | "grammar::me::tcl" (0.1) -# [2] | "grammar::me::cpu::gasm" (0.1) -# [3] | "grammar::me::cpu" (0.2) +# [2] | "grammar::me::cpu" (0.2) +# [3] | "grammar::me::cpu::gasm" (0.1) # [4] | "grammar::me::cpu::core" (0.2) # [5] | "grammar::me::util" (0.1) # -------+ Package {__grammar_me 0.0} @@ -1476,20 +1499,20 @@ Package {grammar::me::tcl 0.1} See __grammar_me Platform * Desc {Virtual machine implementation I for parsing token streams} +Package {grammar::me::cpu 0.2} +See __grammar_me +Platform * +Desc {Virtual machine implementation II for parsing token streams} + Package {grammar::me::cpu::gasm 0.1} See __grammar_me Platform * Desc {ME assembler} -Package {grammar::me::cpu 0.2} -See __grammar_me -Platform * -Desc {Virtual machine implementation II for parsing token streams} - Package {grammar::me::cpu::core 0.2} See __grammar_me Platform * Desc {ME virtual machine state manipulation} @@ -1542,10 +1565,82 @@ Path pkgIndex.tcl # # ############# +# ############# +# Module "http" +# [1] | "autoproxy" (1.5.3) +# -------+ + +Package {autoproxy 1.5.3} +Platform * +Desc {Automatic HTTP proxy usage and authentication} +Base @TAP_DIR@/http +Path autoproxy.tcl +Path pkgIndex.tcl + +# +# ############# + +# ############## +# Module "httpd" +# [1] | "httpd" (4.0) +# [2] | "httpd::dispatch" (4.0) +# [3] | "httpd::content" (4.0) +# [4] | "scgi::app" (0.1) +# -------+ + +Package {__httpd 0.0} +Platform * +Desc {Tcllib module} +Hidden +Base @TAP_DIR@/httpd +Path content.tcl +Path dispatch.tcl +Path httpd.tcl +Path pkgIndex.tcl +Path scgi-app.tcl + +Package {httpd 4.0} +See __httpd +Platform * +Desc {Tcllib package} + +Package {httpd::dispatch 4.0} +See __httpd +Platform * +Desc {Tcllib package} + +Package {httpd::content 4.0} +See __httpd +Platform * +Desc {Tcllib package} + +Package {scgi::app 0.1} +See __httpd +Platform * +Desc {Tcllib package} + +# +# ############## + +# ################# +# Module "httpwget" +# [1] | "http::wget" (0.1) +# -------+ + +Package {http::wget 0.1} +Platform * +Desc {Tcllib package} +Base @TAP_DIR@/httpwget +Path pkgIndex.tcl +Path wget.tcl + +# +# ################# + # ############# # Module "html" # [1] | "html" (1.4.4) # -------+ @@ -1559,38 +1654,23 @@ # # ############# # ################## # Module "htmlparse" -# [1] | "htmlparse" (1.2.1) +# [1] | "htmlparse" (1.2.2) # -------+ -Package {htmlparse 1.2.1} +Package {htmlparse 1.2.2} Platform * Desc {Procedures to parse HTML strings} Base @TAP_DIR@/htmlparse Path htmlparse.tcl Path pkgIndex.tcl # # ################## -# ############# -# Module "http" -# [1] | "autoproxy" (1.5.3) -# -------+ - -Package {autoproxy 1.5.3} -Platform * -Desc {Automatic HTTP proxy usage and authentication} -Base @TAP_DIR@/http -Path autoproxy.tcl -Path pkgIndex.tcl - -# -# ############# - # ############## # Module "ident" # [1] | "ident" (0.42) # -------+ @@ -1604,14 +1684,14 @@ # # ############## # ############## # Module "imap4" -# [1] | "imap4" (0.5.2) +# [1] | "imap4" (0.5.3) # -------+ -Package {imap4 0.5.2} +Package {imap4 0.5.3} Platform * Desc {imap client-side tcl implementation of imap protocol} Base @TAP_DIR@/imap4 Path imap4.tcl Path pkgIndex.tcl @@ -1669,11 +1749,11 @@ # # ############### # ############ # Module "irc" -# [1] | "picoirc" (0.5.1) +# [1] | "picoirc" (0.5.2) # [2] | "irc" (0.6.1) # -------+ Package {__irc 0.0} Platform * @@ -1682,11 +1762,11 @@ Base @TAP_DIR@/irc Path irc.tcl Path picoirc.tcl Path pkgIndex.tcl -Package {picoirc 0.5.1} +Package {picoirc 0.5.2} See __irc Platform * Desc {Small and simple embeddable IRC client.} Package {irc 0.6.1} @@ -1841,14 +1921,29 @@ Desc {Collection of predefined appenders for logger} # # ############ +# ################# +# Module "markdown" +# [1] | "Markdown" (1.0) +# -------+ + +Package {Markdown 1.0} +Platform * +Desc {Tcllib package} +Base @TAP_DIR@/markdown +Path markdown.tcl +Path pkgIndex.tcl + +# +# ################# + # ############ # Module "map" -# [1] | "map::slippy::fetcher" (0.3) -# [2] | "map::geocode::nominatim" (0.1) +# [1] | "map::geocode::nominatim" (0.1) +# [2] | "map::slippy::fetcher" (0.4) # [3] | "map::slippy" (0.5) # [4] | "map::slippy::cache" (0.2) # -------+ Package {__map 0.0} @@ -1860,20 +1955,20 @@ Path map_slippy.tcl Path map_slippy_cache.tcl Path map_slippy_fetcher.tcl Path pkgIndex.tcl -Package {map::slippy::fetcher 0.3} -See __map -Platform * -Desc {Accessing a server providing tiles for slippy-based maps} - Package {map::geocode::nominatim 0.1} See __map Platform * Desc {Resolving geographical names with a Nominatim service} +Package {map::slippy::fetcher 0.4} +See __map +Platform * +Desc {Accessing a server providing tiles for slippy-based maps} + Package {map::slippy 0.5} See __map Platform * Desc {Common code for slippy based map packages} @@ -1901,31 +1996,32 @@ # ################ # ############# # Module "math" # [1] | "math::numtheory" (1.0) -# [2] | "math::statistics" (0.9.3) +# [2] | "math::statistics" (1.0) # [3] | "math::rationalfunctions" (1.0.1) # [4] | "math::fourier" (1.0.2) -# [5] | "math::complexnumbers" (1.0.2) -# [6] | "math" (1.2.5) +# [5] | "math" (1.2.5) +# [6] | "math::complexnumbers" (1.0.2) # [7] | "math::roman" (1.0) -# [8] | "math::interpolate" (1.1) -# [9] | "math::fuzzy" (0.2.1) -# [10] | "math::linearalgebra" (1.1.5) -# [11] | "math::special" (0.3.0) +# [8] | "math::exact" (1.0) +# [9] | "math::interpolate" (1.1) +# [10] | "math::fuzzy" (0.2.1) +# [11] | "math::linearalgebra" (1.1.5) # [12] | "math::optimize" (1.0.1) -# [13] | "math::bignum" (3.1.1) -# [14] | "math::calculus::symdiff" (1.0) -# [15] | "math::geometry" (1.1.3) +# [13] | "math::special" (0.3.0) +# [14] | "math::calculus::symdiff" (1.0.1) +# [15] | "math::bignum" (3.1.1) # [16] | "math::calculus" (0.8.1) -# [17] | "math::constants" (1.0.1) -# [18] | "math::polynomials" (1.0.1) -# [19] | "math::decimal" (1.0.3) -# [20] | "math::bigfloat" (1.2.2) -# [21] | "math::bigfloat" (2.0.2) -# [22] | "math::machineparameters" (0.1) +# [17] | "math::geometry" (1.1.3) +# [18] | "math::constants" (1.0.2) +# [19] | "math::polynomials" (1.0.1) +# [20] | "math::decimal" (1.0.3) +# [21] | "math::bigfloat" (1.2.2) +# [22] | "math::bigfloat" (2.0.2) +# [23] | "math::machineparameters" (0.1) # -------+ Package {__math 0.0} Platform * Desc {Tcl Decimal Arithmetic Library, tclrep, Math, Tcl Math Library, Symbolic differentiation for Tcl} @@ -1939,10 +2035,11 @@ Path classic_polyns.tcl Path combinatorics.tcl Path constants.tcl Path decimal.tcl Path elliptic.tcl +Path exact.tcl Path exponential.tcl Path fourier.tcl Path fuzzy.tcl Path geometry.tcl Path interpolate.tcl @@ -1972,11 +2069,11 @@ Package {math::numtheory 1.0} See __math Platform * Desc {Number Theory} -Package {math::statistics 0.9.3} +Package {math::statistics 1.0} See __math Platform * Desc {Basic statistical functions and procedures} Package {math::rationalfunctions 1.0.1} @@ -1987,25 +2084,30 @@ Package {math::fourier 1.0.2} See __math Platform * Desc {Discrete and fast fourier transforms} +Package {math 1.2.5} +See __math +Platform * +Desc {Combinatorial functions in the Tcl Math Library} + Package {math::complexnumbers 1.0.2} See __math Platform * Desc {Straightforward complex number package} -Package {math 1.2.5} -See __math -Platform * -Desc {Combinatorial functions in the Tcl Math Library} - Package {math::roman 1.0} See __math Platform * Desc {Tools for creating and manipulating roman numerals} +Package {math::exact 1.0} +See __math +Platform * +Desc {Exact Real Arithmetic} + Package {math::interpolate 1.1} See __math Platform * Desc {Interpolation routines} @@ -2017,41 +2119,41 @@ Package {math::linearalgebra 1.1.5} See __math Platform * Desc {Linear Algebra} +Package {math::optimize 1.0.1} +See __math +Platform * +Desc {Optimisation routines} + Package {math::special 0.3.0} See __math Platform * Desc {Special mathematical functions} -Package {math::optimize 1.0.1} +Package {math::calculus::symdiff 1.0.1} See __math Platform * -Desc {Optimisation routines} +Desc {Symbolic differentiation for Tcl} Package {math::bignum 3.1.1} See __math Platform * Desc {Arbitrary precision integer numbers} -Package {math::calculus::symdiff 1.0} +Package {math::calculus 0.8.1} See __math Platform * -Desc {Symbolic differentiation for Tcl} +Desc {Romberg integration} Package {math::geometry 1.1.3} See __math Platform * Desc {Geometrical computations} -Package {math::calculus 0.8.1} -See __math -Platform * -Desc {Integration and ordinary differential equations} - -Package {math::constants 1.0.1} +Package {math::constants 1.0.2} See __math Platform * Desc {Mathematical and numerical constants} Package {math::polynomials 1.0.1} @@ -2143,12 +2245,12 @@ # # ################# # ############# # Module "mime" -# [1] | "mime" (1.6) -# [2] | "smtp" (1.4.5) +# [1] | "smtp" (1.4.5) +# [2] | "mime" (1.6) # -------+ Package {__mime 0.0} Platform * Desc {Mime, smtp client} @@ -2156,20 +2258,20 @@ Base @TAP_DIR@/mime Path mime.tcl Path pkgIndex.tcl Path smtp.tcl +Package {smtp 1.4.5} +See __mime +Platform * +Desc {Client-side tcl implementation of the smtp protocol} + Package {mime 1.6} See __mime Platform * Desc {Manipulation of MIME body parts} -Package {smtp 1.4.5} -See __mime -Platform * -Desc {Client-side tcl implementation of the smtp protocol} - # # ############# # #################### # Module "multiplexer" @@ -2216,12 +2318,12 @@ # # ############# # ################ # Module "nettool" -# [1] | "nettool" (0.4) -# [2] | "nettool::platform::windows" (0.1) +# [1] | "nettool" (0.5.1) +# [2] | "nettool::platform::windows" (0.2) # -------+ Package {__nettool 0.0} Platform * Desc {nettool} @@ -2235,16 +2337,16 @@ Path platform_unix.tcl Path platform_unix_linux.tcl Path platform_unix_macosx.tcl Path platform_windows.tcl -Package {nettool 0.4} +Package {nettool 0.5.1} See __nettool Platform * Desc {Tools for networked applications} -Package {nettool::platform::windows 0.1} +Package {nettool::platform::windows 0.2} See __nettool Platform * Desc {Tcllib package} # @@ -2267,12 +2369,13 @@ # ############ # Module "nns" # [1] | "nameserv::server" (0.3.2) # [2] | "nameserv" (0.4.2) -# [3] | "nameserv::common" (0.1) -# [4] | "nameserv::auto" (0.3) +# [3] | "nameserv::auto" (0.3) +# [4] | "nameserv::common" (0.1) +# [5] | "nameserv::cluster" (0.2.3) # -------+ Package {__nns 0.0} Platform * Desc {Name service facility} @@ -2279,10 +2382,11 @@ Hidden Base @TAP_DIR@/nns Path common.tcl Path nns.tcl Path nns_auto.tcl +Path nns_cluster.tcl Path pkgIndex.tcl Path server.tcl Package {nameserv::server 0.3.2} See __nns @@ -2292,19 +2396,24 @@ Package {nameserv 0.4.2} See __nns Platform * Desc {Name service facility, Client} +Package {nameserv::auto 0.3} +See __nns +Platform * +Desc {Name service facility, Client Extension} + Package {nameserv::common 0.1} See __nns Platform * Desc {Name service facility, shared definitions} -Package {nameserv::auto 0.3} +Package {nameserv::cluster 0.2.3} See __nns Platform * -Desc {Name service facility, Client Extension} +Desc {Tcllib package} # # ############ # ############# @@ -2350,16 +2459,59 @@ Path pkgIndex.tcl # # ############## +# ################## +# Module "oodialect" +# [1] | "oo::dialect" (0.3) +# -------+ + +Package {oo::dialect 0.3} +Platform * +Desc {Dictionary Tools} +Base @TAP_DIR@/oodialect +Path oodialect.tcl +Path pkgIndex.tcl + +# +# ################## + +# ############### +# Module "oometa" +# [1] | "oo::meta" (0.4.1) +# [2] | "oo::option" (0.3) +# -------+ + +Package {__oometa 0.0} +Platform * +Desc {Standardized OO Framework for development} +Hidden +Base @TAP_DIR@/oometa +Path oometa.tcl +Path oooption.tcl +Path pkgIndex.tcl + +Package {oo::meta 0.4.1} +See __oometa +Platform * +Desc {Dictionary Tools} + +Package {oo::option 0.3} +See __oometa +Platform * +Desc {Tcllib package} + +# +# ############### + # ############### # Module "ooutil" -# [1] | "oo::util" (1.2.1) +# [1] | "oo::util" (1.2.2) # -------+ -Package {oo::util 1.2.1} +Package {oo::util 1.2.2} Platform * Desc {Utility commands for TclOO} Base @TAP_DIR@/ooutil Path ooutil.tcl Path pkgIndex.tcl @@ -2382,50 +2534,50 @@ # # ############ # ############# # Module "page" -# [1] | "page::gen::peg::ser" (0.1) -# [2] | "page::gen::peg::mecpu" (0.1) -# [3] | "page::gen::peg::hb" (0.1) -# [4] | "page::gen::peg::me" (0.1) +# [1] | "page::gen::peg::hb" (0.1) +# [2] | "page::gen::peg::ser" (0.1) +# [3] | "page::gen::peg::me" (0.1) +# [4] | "page::gen::peg::mecpu" (0.1) # [5] | "page::reader::ser" (0.1) # [6] | "page::compiler::peg::mecpu" (0.1.1) # [7] | "page::analysis::peg::minimize" (0.1) -# [8] | "page::analysis::peg::realizable" (0.1) -# [9] | "page::writer::mecpu" (0.1.1) -# [10] | "page::reader::peg" (0.1) -# [11] | "page::writer::ser" (0.1) -# [12] | "page::transform::realizable" (0.1) -# [13] | "page::parse::peg" (0.1) -# [14] | "page::analysis::peg::emodes" (0.1) -# [15] | "page::writer::peg" (0.1) -# [16] | "page::parse::pegser" (0.1) -# [17] | "page::pluginmgr" (0.2) +# [8] | "page::writer::mecpu" (0.1.1) +# [9] | "page::transform::realizable" (0.1) +# [10] | "page::writer::ser" (0.1) +# [11] | "page::reader::peg" (0.1) +# [12] | "page::parse::peg" (0.1) +# [13] | "page::analysis::peg::realizable" (0.1) +# [14] | "page::parse::pegser" (0.1) +# [15] | "page::pluginmgr" (0.2) +# [16] | "page::analysis::peg::emodes" (0.1) +# [17] | "page::writer::peg" (0.1) # [18] | "page::util::peg" (0.1) # [19] | "page::util::norm::peg" (0.1) -# [20] | "page::analysis::peg::reachable" (0.1) -# [21] | "page::transform::reachable" (0.1) +# [20] | "page::transform::reachable" (0.1) +# [21] | "page::analysis::peg::reachable" (0.1) # [22] | "page::gen::tree::text" (0.1) # [23] | "page::util::quote" (0.1) # [24] | "page::writer::tpc" (0.1) # [25] | "@PKG@" (0.1) -# [26] | "page::reader::treeser" (0.1) -# [27] | "page::reader::hb" (0.1) -# [28] | "page::writer::tree" (0.1) -# [29] | "page::transform::mecpu" (0.1) +# [26] | "page::writer::tree" (0.1) +# [27] | "page::reader::treeser" (0.1) +# [28] | "page::reader::hb" (0.1) +# [29] | "page::parse::lemon" (0.1) # [30] | "page::reader::lemon" (0.1) -# [31] | "page::parse::lemon" (0.1) +# [31] | "page::transform::mecpu" (0.1) # [32] | "page::util::flow" (0.1) # [33] | "page::gen::peg::cpkg" (0.1) -# [34] | "page::writer::identity" (0.1) -# [35] | "page::writer::me" (0.1) +# [34] | "page::writer::me" (0.1) +# [35] | "page::writer::identity" (0.1) # [36] | "page::writer::hb" (0.1) # [37] | "page::writer::null" (0.1) # [38] | "page::gen::peg::canon" (0.1) -# [39] | "page::parse::peghb" (0.1) -# [40] | "page::util::norm::lemon" (0.1) +# [39] | "page::util::norm::lemon" (0.1) +# [40] | "page::parse::peghb" (0.1) # [41] | "page::config::peg" (0.1) # -------+ Package {__page 0.0} Platform * @@ -2476,27 +2628,27 @@ Path util_norm_lemon.tcl Path util_norm_peg.tcl Path util_peg.tcl Path util_quote.tcl -Package {page::gen::peg::ser 0.1} -See __page -Platform * -Desc {Tcllib package} - -Package {page::gen::peg::mecpu 0.1} -See __page -Platform * -Desc {Tcllib package} - Package {page::gen::peg::hb 0.1} See __page +Platform * +Desc {Tcllib package} + +Package {page::gen::peg::ser 0.1} +See __page Platform * Desc {Tcllib package} Package {page::gen::peg::me 0.1} See __page +Platform * +Desc {Tcllib package} + +Package {page::gen::peg::mecpu 0.1} +See __page Platform * Desc {Tcllib package} Package {page::reader::ser 0.1} See __page @@ -2511,46 +2663,36 @@ Package {page::analysis::peg::minimize 0.1} See __page Platform * Desc {Tcllib package} -Package {page::analysis::peg::realizable 0.1} -See __page -Platform * -Desc {Tcllib package} - Package {page::writer::mecpu 0.1.1} See __page Platform * Desc {Tcllib package} -Package {page::reader::peg 0.1} +Package {page::transform::realizable 0.1} See __page Platform * Desc {Tcllib package} Package {page::writer::ser 0.1} See __page Platform * Desc {Tcllib package} -Package {page::transform::realizable 0.1} +Package {page::reader::peg 0.1} See __page Platform * Desc {Tcllib package} Package {page::parse::peg 0.1} See __page Platform * Desc {Tcllib package} -Package {page::analysis::peg::emodes 0.1} -See __page -Platform * -Desc {Tcllib package} - -Package {page::writer::peg 0.1} +Package {page::analysis::peg::realizable 0.1} See __page Platform * Desc {Tcllib package} Package {page::parse::pegser 0.1} @@ -2560,10 +2702,20 @@ Package {page::pluginmgr 0.2} See __page Platform * Desc {page plugin manager} + +Package {page::analysis::peg::emodes 0.1} +See __page +Platform * +Desc {Tcllib package} + +Package {page::writer::peg 0.1} +See __page +Platform * +Desc {Tcllib package} Package {page::util::peg 0.1} See __page Platform * Desc {page PEG transformation utilities} @@ -2571,17 +2723,17 @@ Package {page::util::norm::peg 0.1} See __page Platform * Desc {Tcllib package} -Package {page::analysis::peg::reachable 0.1} -See __page -Platform * -Desc {Tcllib package} - Package {page::transform::reachable 0.1} See __page +Platform * +Desc {Tcllib package} + +Package {page::analysis::peg::reachable 0.1} +See __page Platform * Desc {Tcllib package} Package {page::gen::tree::text 0.1} See __page @@ -2600,10 +2752,15 @@ Package {@PKG@ 0.1} See __page Platform * Desc {Tcllib package} + +Package {page::writer::tree 0.1} +See __page +Platform * +Desc {Tcllib package} Package {page::reader::treeser 0.1} See __page Platform * Desc {Tcllib package} @@ -2611,26 +2768,21 @@ Package {page::reader::hb 0.1} See __page Platform * Desc {Tcllib package} -Package {page::writer::tree 0.1} -See __page -Platform * -Desc {Tcllib package} - -Package {page::transform::mecpu 0.1} +Package {page::parse::lemon 0.1} See __page Platform * Desc {Tcllib package} Package {page::reader::lemon 0.1} See __page Platform * Desc {Tcllib package} -Package {page::parse::lemon 0.1} +Package {page::transform::mecpu 0.1} See __page Platform * Desc {Tcllib package} Package {page::util::flow 0.1} @@ -2641,17 +2793,17 @@ Package {page::gen::peg::cpkg 0.1} See __page Platform * Desc {Tcllib package} -Package {page::writer::identity 0.1} -See __page -Platform * -Desc {Tcllib package} - Package {page::writer::me 0.1} See __page +Platform * +Desc {Tcllib package} + +Package {page::writer::identity 0.1} +See __page Platform * Desc {Tcllib package} Package {page::writer::hb 0.1} See __page @@ -2666,16 +2818,16 @@ Package {page::gen::peg::canon 0.1} See __page Platform * Desc {Tcllib package} -Package {page::parse::peghb 0.1} +Package {page::util::norm::lemon 0.1} See __page Platform * Desc {Tcllib package} -Package {page::util::norm::lemon 0.1} +Package {page::parse::peghb 0.1} See __page Platform * Desc {Tcllib package} Package {page::config::peg 0.1} @@ -2782,19 +2934,31 @@ # ############## # ################### # Module "processman" # [1] | "odie::processman" (0.3) +# [2] | "processman" (0.3) # -------+ -Package {odie::processman 0.3} +Package {__processman 0.0} Platform * -Desc {Tcllib package} +Desc {processman} +Hidden Base @TAP_DIR@/processman Path pkgIndex.tcl Path processman.tcl +Package {odie::processman 0.3} +See __processman +Platform * +Desc {Tcllib package} + +Package {processman 0.3} +See __processman +Platform * +Desc {Tool for automating the period callback of commands} + # # ################### # ################# # Module "profiler" @@ -2811,45 +2975,45 @@ # # ################# # ########### # Module "pt" -# [1] | "pt::rde::critcl" (1.0.3) +# [1] | "pt::rde::critcl" (1.3.4) # [2] | "pt::peg::to::param" (1.0.1) # [3] | "configuration" (1) # [4] | "pt::peg::export::json" (1) -# [5] | "pt::peg::from::json" (1) -# [6] | "pt::peg::export::peg" (1) -# [7] | "pt::tclparam::configuration::snit" (1.0.2) +# [5] | "pt::tclparam::configuration::snit" (1.0.2) +# [6] | "pt::peg::from::json" (1) +# [7] | "pt::peg::export::peg" (1) # [8] | "pt::peg::to::cparam" (1.1.3) -# [9] | "pt::rde" (1.0.3) -# [10] | "pt::peg::import" (1) +# [9] | "pt::peg::import" (1) +# [10] | "pt::peg::to::peg" (1.0.2) # [11] | "pt::parse::peg" (1.0.1) -# [12] | "pt::peg::to::peg" (1.0.2) -# [13] | "pt::peg::import::peg" (1) +# [12] | "pt::peg::import::peg" (1) +# [13] | "pt::rde" (1.1) # [14] | "pt::peg::from::peg" (1.0.3) # [15] | "pt::cparam::configuration::critcl" (1.0.2) # [16] | "pt::tclparam::configuration::tcloo" (1.0.4) # [17] | "pt::parse::peg_tcl" (1.0.1) -# [18] | "pt::util" (1) +# [18] | "pt::util" (1.1) # [19] | "pt::peg::op" (1.0.1) -# [20] | "pt::ast" (1.1) -# [21] | "paths" (1) -# [22] | "pt::pe::op" (1) +# [20] | "paths" (1) +# [21] | "pt::ast" (1.1) +# [22] | "pt::pe::op" (1.0.1) # [23] | "pt::peg::import::json" (1) # [24] | "pt::peg::to::json" (1) # [25] | "pt::peg::export::container" (1) -# [26] | "pt::pgen" (1.0.3) -# [27] | "pt::peg::interp" (1.0.1) -# [28] | "pt::peg::to::container" (1) -# [29] | "pt::peg::export" (1) -# [30] | "pt::peg::to::tclparam" (1.0.2) -# [31] | "pt::peg::container" (1) -# [32] | "pt::peg::container::peg" (1) +# [26] | "pt::peg::export" (1) +# [27] | "pt::peg::to::container" (1) +# [28] | "pt::pgen" (1.0.3) +# [29] | "pt::peg::interp" (1.0.1) +# [30] | "pt::peg::container" (1) +# [31] | "pt::peg::container::peg" (1) +# [32] | "pt::peg::to::tclparam" (1.0.3) # [33] | "text::write" (1) # [34] | "pt::peg" (1) -# [35] | "pt::rde::oo" (1.0.3) +# [35] | "pt::rde::oo" (1.1) # [36] | "pt::pe" (1.0.2) # [37] | "char" (1.0.1) # [38] | "pt::cparam::configuration::tea" (0.1) # -------+ @@ -2915,11 +3079,11 @@ Path rde_critcl/tc.h Path rde_critcl/util.c Path rde_critcl/util.h Path text_write.tcl -Package {pt::rde::critcl 1.0.3} +Package {pt::rde::critcl 1.3.4} See __pt Platform * Desc {Tcllib package} Package {pt::peg::to::param 1.0.1} @@ -2935,10 +3099,15 @@ Package {pt::peg::export::json 1} See __pt Platform * Desc {PEG Export Plugin. Write JSON format} +Package {pt::tclparam::configuration::snit 1.0.2} +See __pt +Platform * +Desc {Tcl/PARAM, Canned configuration, Snit} + Package {pt::peg::from::json 1} See __pt Platform * Desc {PEG Conversion. Read JSON format} @@ -2945,45 +3114,40 @@ Package {pt::peg::export::peg 1} See __pt Platform * Desc {PEG Export Plugin. Write PEG format} -Package {pt::tclparam::configuration::snit 1.0.2} -See __pt -Platform * -Desc {Tcl/PARAM, Canned configuration, Snit} - Package {pt::peg::to::cparam 1.1.3} See __pt Platform * Desc {PEG Conversion. Write CPARAM format} -Package {pt::rde 1.0.3} -See __pt -Platform * -Desc {Parsing Runtime Support, PARAM based} - Package {pt::peg::import 1} See __pt Platform * Desc {PEG Import} +Package {pt::peg::to::peg 1.0.2} +See __pt +Platform * +Desc {PEG Conversion. Write PEG format} + Package {pt::parse::peg 1.0.1} See __pt Platform * Desc {Parser Tools PEG Parser} -Package {pt::peg::to::peg 1.0.2} -See __pt -Platform * -Desc {PEG Conversion. Write PEG format} - Package {pt::peg::import::peg 1} See __pt Platform * Desc {PEG Import Plugin. Read PEG format} +Package {pt::rde 1.1} +See __pt +Platform * +Desc {Parsing Runtime Support, PARAM based} + Package {pt::peg::from::peg 1.0.3} See __pt Platform * Desc {PEG Conversion. Read PEG format} @@ -3000,31 +3164,31 @@ Package {pt::parse::peg_tcl 1.0.1} See __pt Platform * Desc {Tcllib package} -Package {pt::util 1} +Package {pt::util 1.1} See __pt Platform * Desc {Tcllib package} Package {pt::peg::op 1.0.1} See __pt Platform * Desc {Parser Tools PE Grammar Utility Operations} -Package {pt::ast 1.1} -See __pt -Platform * -Desc {Abstract Syntax Tree Serialization} - Package {paths 1} See __pt Platform * Desc {Tcllib package} -Package {pt::pe::op 1} +Package {pt::ast 1.1} +See __pt +Platform * +Desc {General utilities} + +Package {pt::pe::op 1.0.1} See __pt Platform * Desc {Parsing Expression Utilities} Package {pt::peg::import::json 1} @@ -3040,10 +3204,20 @@ Package {pt::peg::export::container 1} See __pt Platform * Desc {PEG Export Plugin. Write CONTAINER format} +Package {pt::peg::export 1} +See __pt +Platform * +Desc {PEG Export} + +Package {pt::peg::to::container 1} +See __pt +Platform * +Desc {PEG Conversion. Write CONTAINER format} + Package {pt::pgen 1.0.3} See __pt Platform * Desc {Parser Generator} @@ -3050,25 +3224,10 @@ Package {pt::peg::interp 1.0.1} See __pt Platform * Desc {Interpreter for parsing expression grammars} -Package {pt::peg::to::container 1} -See __pt -Platform * -Desc {PEG Conversion. Write CONTAINER format} - -Package {pt::peg::export 1} -See __pt -Platform * -Desc {PEG Export} - -Package {pt::peg::to::tclparam 1.0.2} -See __pt -Platform * -Desc {PEG Conversion. Write TCLPARAM format} - Package {pt::peg::container 1} See __pt Platform * Desc {PEG Storage} @@ -3075,10 +3234,15 @@ Package {pt::peg::container::peg 1} See __pt Platform * Desc {PEG Storage. Canned PEG grammar specification} +Package {pt::peg::to::tclparam 1.0.3} +See __pt +Platform * +Desc {PEG Conversion. Write TCLPARAM format} + Package {text::write 1} See __pt Platform * Desc {Tcllib package} @@ -3085,11 +3249,11 @@ Package {pt::peg 1} See __pt Platform * Desc {Parsing Expression Grammar Serialization} -Package {pt::rde::oo 1.0.3} +Package {pt::rde::oo 1.1} See __pt Platform * Desc {Tcllib package} Package {pt::pe 1.0.2} @@ -3156,14 +3320,14 @@ # # ############### # ############# # Module "rest" -# [1] | "rest" (1.0.1) +# [1] | "rest" (1.0.2) # -------+ -Package {rest 1.0.1} +Package {rest 1.0.2} Platform * Desc {define REST web APIs and call them inline or asychronously} Base @TAP_DIR@/rest Path pkgIndex.tcl Path rest.tcl @@ -3171,12 +3335,12 @@ # # ############# # ############### # Module "ripemd" -# [1] | "ripemd160" (1.0.5) -# [2] | "ripemd128" (1.0.5) +# [1] | "ripemd128" (1.0.5) +# [2] | "ripemd160" (1.0.5) # -------+ Package {__ripemd 0.0} Platform * Desc {RIPEMD Message-Digest Algorithm} @@ -3184,27 +3348,27 @@ Base @TAP_DIR@/ripemd Path pkgIndex.tcl Path ripemd128.tcl Path ripemd160.tcl +Package {ripemd128 1.0.5} +See __ripemd +Platform * +Desc {RIPEMD-128 Message-Digest Algorithm} + Package {ripemd160 1.0.5} See __ripemd Platform * Desc {RIPEMD-160 Message-Digest Algorithm} -Package {ripemd128 1.0.5} -See __ripemd -Platform * -Desc {RIPEMD-128 Message-Digest Algorithm} - # # ############### # ############# # Module "sasl" -# [1] | "SASL::SCRAM" (0.1) -# [2] | "SASL::XGoogleToken" (1.0.1) +# [1] | "SASL::XGoogleToken" (1.0.1) +# [2] | "SASL::SCRAM" (0.1) # [3] | "SASL::NTLM" (1.1.2) # [4] | "SASL" (1.3.3) # -------+ Package {__sasl 0.0} @@ -3216,20 +3380,20 @@ Path ntlm.tcl Path pkgIndex.tcl Path sasl.tcl Path scram.tcl +Package {SASL::XGoogleToken 1.0.1} +See __sasl +Platform * +Desc {Implementation of SASL NTLM mechanism for Tcl} + Package {SASL::SCRAM 0.1} See __sasl Platform * Desc {Implementation of SASL SCRAM mechanism for Tcl} -Package {SASL::XGoogleToken 1.0.1} -See __sasl -Platform * -Desc {Implementation of SASL NTLM mechanism for Tcl} - Package {SASL::NTLM 1.1.2} See __sasl Platform * Desc {Implementation of SASL NTLM mechanism for Tcl} @@ -3241,13 +3405,13 @@ # # ############# # ############# # Module "sha1" -# [1] | "sha256" (1.0.3) -# [2] | "sha1" (1.1.1) -# [3] | "sha1" (2.0.3) +# [1] | "sha1" (1.1.1) +# [2] | "sha1" (2.0.3) +# [3] | "sha256" (1.0.3) # -------+ Package {__sha1 0.0} Platform * Desc {SHA-x Message-Digest Algorithm} @@ -3258,15 +3422,10 @@ Path sha1c.tcl Path sha1v1.tcl Path sha256.tcl Path sha256c.tcl -Package {sha256 1.0.3} -See __sha1 -Platform * -Desc {SHA256 Message-Digest Algorithm} - Package {sha1 1.1.1} See __sha1 Platform * Desc {SHA1 Message-Digest Algorithm} @@ -3273,18 +3432,23 @@ Package {sha1 2.0.3} See __sha1 Platform * Desc {SHA1 Message-Digest Algorithm} +Package {sha256 1.0.3} +See __sha1 +Platform * +Desc {SHA256 Message-Digest Algorithm} + # # ############# # ################### # Module "simulation" # [1] | "simulation::montecarlo" (0.1) -# [2] | "simulation::random" (0.3.1) -# [3] | "simulation::annealing" (0.2) +# [2] | "simulation::annealing" (0.2) +# [3] | "simulation::random" (0.3.1) # -------+ Package {__simulation 0.0} Platform * Desc {Tcl Simulation Tools} @@ -3297,21 +3461,21 @@ Package {simulation::montecarlo 0.1} See __simulation Platform * Desc {Monte Carlo simulations} + +Package {simulation::annealing 0.2} +See __simulation +Platform * +Desc {Simulated annealing} Package {simulation::random 0.3.1} See __simulation Platform * Desc {Pseudo-random number generators} -Package {simulation::annealing 0.2} -See __simulation -Platform * -Desc {Simulated annealing} - # # ################### # ############## # Module "smtpd" @@ -3349,16 +3513,16 @@ Path validate.tcl Package {snit 1.4.2} See __snit Platform * -Desc {page PEG transformation utilities} +Desc {page character quoting utilities} Package {snit 2.3.2} See __snit Platform * -Desc {page PEG transformation utilities} +Desc {page character quoting utilities} # # ############# # ################ @@ -3406,12 +3570,12 @@ # # ############### # ############### # Module "string" -# [1] | "string::token::shell" (1.2) -# [2] | "string::token" (1) +# [1] | "string::token" (1) +# [2] | "string::token::shell" (1.2) # -------+ Package {__string 0.0} Platform * Desc {Text and string utilities} @@ -3419,20 +3583,20 @@ Base @TAP_DIR@/string Path pkgIndex.tcl Path token.tcl Path token_shell.tcl +Package {string::token 1} +See __string +Platform * +Desc {Regex based iterative lexing} + Package {string::token::shell 1.2} See __string Platform * Desc {Parsing of shell command line} -Package {string::token 1} -See __string -Platform * -Desc {Regex based iterative lexing} - # # ############### # ################### # Module "stringprep" @@ -3482,13 +3646,13 @@ # [2] | "struct::tree" (1.2.2) # [3] | "struct::tree" (2.1.2) # [4] | "struct::graph" (1.2.1) # [5] | "struct::graph" (2.4) # [6] | "struct::skiplist" (1.3) -# [7] | "struct::set" (2.2.3) -# [8] | "struct" (1.4) -# [9] | "struct" (2.1) +# [7] | "struct" (1.4) +# [8] | "struct" (2.1) +# [9] | "struct::set" (2.2.3) # [10] | "struct::queue" (1.4.5) # [11] | "struct::prioqueue" (1.4) # [12] | "struct::disjointset" (1.0) # [13] | "struct::pool" (1.2.3) # [14] | "struct::list" (1.8.3) @@ -3563,15 +3727,10 @@ Package {struct::skiplist 1.3} See __struct Platform * Desc {Create and manipulate skiplists} -Package {struct::set 2.2.3} -See __struct -Platform * -Desc {Procedures for manipulating sets} - Package {struct 1.4} See __struct Platform * Desc {Tcllib package} @@ -3578,10 +3737,15 @@ Package {struct 2.1} See __struct Platform * Desc {Tcllib package} +Package {struct::set 2.2.3} +See __struct +Platform * +Desc {Procedures for manipulating sets} + Package {struct::queue 1.4.5} See __struct Platform * Desc {Create and manipulate queue objects} @@ -3671,22 +3835,22 @@ # # ############## # ############# # Module "term" -# [1] | "term::receive::bind" (0.1) -# [2] | "term::ansi::ctrl::unix" (0.1.1) +# [1] | "term::ansi::ctrl::unix" (0.1.1) +# [2] | "term::receive::bind" (0.1) # [3] | "term::ansi::code::attr" (0.1) # [4] | "term::interact::menu" (0.1) # [5] | "term" (0.1) # [6] | "term::interact::pager" (0.1) # [7] | "term::ansi::send" (0.2) # [8] | "term::ansi::code" (0.2) # [9] | "term::send" (0.1) -# [10] | "term::receive" (0.1) -# [11] | "term::ansi::code::macros" (0.1) -# [12] | "term::ansi::code::ctrl" (0.2) +# [10] | "term::ansi::code::macros" (0.1) +# [11] | "term::ansi::code::ctrl" (0.2) +# [12] | "term::receive" (0.1) # -------+ Package {__term 0.0} Platform * Desc {Terminal control} @@ -3704,20 +3868,20 @@ Path pkgIndex.tcl Path receive.tcl Path send.tcl Path term.tcl +Package {term::ansi::ctrl::unix 0.1.1} +See __term +Platform * +Desc {Control operations and queries} + Package {term::receive::bind 0.1} See __term Platform * Desc {Keyboard dispatch from terminals} -Package {term::ansi::ctrl::unix 0.1.1} -See __term -Platform * -Desc {Control operations and queries} - Package {term::ansi::code::attr 0.1} See __term Platform * Desc {ANSI attribute sequences} @@ -3749,15 +3913,10 @@ Package {term::send 0.1} See __term Platform * Desc {General output to terminals} -Package {term::receive 0.1} -See __term -Platform * -Desc {General input from terminals} - Package {term::ansi::code::macros 0.1} See __term Platform * Desc {Macro sequences} @@ -3764,23 +3923,28 @@ Package {term::ansi::code::ctrl 0.2} See __term Platform * Desc {ANSI control sequences} +Package {term::receive 0.1} +See __term +Platform * +Desc {General input from terminals} + # # ############# # ################# # Module "textutil" # [1] | "textutil::repeat" (0.7) # [2] | "textutil::expander" (1.3.1) -# [3] | "textutil::string" (0.8) -# [4] | "textutil::adjust" (0.7.3) -# [5] | "textutil::tabify" (0.7) +# [3] | "textutil::tabify" (0.7) +# [4] | "textutil::string" (0.8) +# [5] | "textutil::adjust" (0.7.3) # [6] | "textutil::trim" (0.7) -# [7] | "textutil::split" (0.7) -# [8] | "textutil" (0.8) +# [7] | "textutil" (0.8) +# [8] | "textutil::split" (0.7) # -------+ Package {__textutil 0.0} Platform * Desc {Text and string utilities, macro processing} @@ -3807,10 +3971,15 @@ Package {textutil::expander 1.3.1} See __textutil Platform * Desc {Procedures to process templates and expand text.} +Package {textutil::tabify 0.7} +See __textutil +Platform * +Desc {Procedures to (un)tabify strings} + Package {textutil::string 0.8} See __textutil Platform * Desc {Procedures to manipulate texts and strings.} @@ -3817,41 +3986,36 @@ Package {textutil::adjust 0.7.3} See __textutil Platform * Desc {Procedures to adjust, indent, and undent paragraphs} -Package {textutil::tabify 0.7} -See __textutil -Platform * -Desc {Procedures to (un)tabify strings} - Package {textutil::trim 0.7} See __textutil Platform * Desc {Procedures to trim strings} +Package {textutil 0.8} +See __textutil +Platform * +Desc {Procedures to manipulate texts and strings.} + Package {textutil::split 0.7} See __textutil Platform * Desc {Procedures to split texts} -Package {textutil 0.8} -See __textutil -Platform * -Desc {Procedures to manipulate texts and strings.} - # # ################# # ############ # Module "tie" -# [1] | "tie::std::array" (1.0) -# [2] | "tie::std::growfile" (1.0) +# [1] | "tie::std::growfile" (1.0) +# [2] | "tie::std::array" (1.0) # [3] | "tie::std::file" (1.0.4) # [4] | "tie::std::dsource" (1.0) -# [5] | "tie" (1.1) -# [6] | "tie::std::rarray" (1.0) +# [5] | "tie::std::rarray" (1.0.1) +# [6] | "tie" (1.1) # [7] | "tie::std::log" (1.0) # -------+ Package {__tie 0.0} Platform * @@ -3865,16 +4029,16 @@ Path tie_file.tcl Path tie_growfile.tcl Path tie_log.tcl Path tie_rarray.tcl -Package {tie::std::array 1.0} +Package {tie::std::growfile 1.0} See __tie Platform * Desc {Array persistence, standard data sources} -Package {tie::std::growfile 1.0} +Package {tie::std::array 1.0} See __tie Platform * Desc {Array persistence, standard data sources} Package {tie::std::file 1.0.4} @@ -3885,20 +4049,20 @@ Package {tie::std::dsource 1.0} See __tie Platform * Desc {Array persistence, standard data sources} +Package {tie::std::rarray 1.0.1} +See __tie +Platform * +Desc {Array persistence, standard data sources} + Package {tie 1.1} See __tie Platform * Desc {Array persistence} -Package {tie::std::rarray 1.0} -See __tie -Platform * -Desc {Array persistence, standard data sources} - Package {tie::std::log 1.0} See __tie Platform * Desc {Array persistence, standard data sources} @@ -3918,18 +4082,74 @@ Path tiff.tcl # # ############# +# ############# +# Module "tool" +# [1] | "tool::pipeline" (0.1) +# [2] | "tool" (0.5) +# [3] | "tool::option" (0.1) +# -------+ + +Package {__tool 0.0} +Platform * +Desc {Standardized OO Framework for development} +Hidden +Base @TAP_DIR@/tool +Path ensemble.tcl +Path event.tcl +Path index.tcl +Path metaclass.tcl +Path option.tcl +Path organ.tcl +Path pipeline.tcl +Path pkgIndex.tcl +Path script.tcl +Path uuid.tcl + +Package {tool::pipeline 0.1} +See __tool +Platform * +Desc {Tcllib package} + +Package {tool 0.5} +See __tool +Platform * +Desc {Dictionary Tools} + +Package {tool::option 0.1} +See __tool +Platform * +Desc {Tcllib package} + +# +# ############# + +# ###################### +# Module "tool_datatype" +# [1] | "tool::datatype" (0.1) +# -------+ + +Package {tool::datatype 0.1} +Platform * +Desc {Tcllib package} +Base @TAP_DIR@/tool_datatype +Path datatype.tcl +Path pkgIndex.tcl + +# +# ###################### + # ################# # Module "transfer" -# [1] | "transfer::copy" (0.3) -# [2] | "transfer::data::source" (0.2) -# [3] | "transfer::copy::queue" (0.1) -# [4] | "transfer::data::destination" (0.2) -# [5] | "transfer::receiver" (0.2) -# [6] | "transfer::transmitter" (0.2) +# [1] | "transfer::data::source" (0.2) +# [2] | "transfer::copy" (0.3) +# [3] | "transfer::data::destination" (0.2) +# [4] | "transfer::copy::queue" (0.1) +# [5] | "transfer::transmitter" (0.2) +# [6] | "transfer::receiver" (0.2) # [7] | "transfer::connect" (0.2) # -------+ Package {__transfer 0.0} Platform * @@ -3942,37 +4162,37 @@ Path dsource.tcl Path pkgIndex.tcl Path receiver.tcl Path tqueue.tcl Path transmitter.tcl + +Package {transfer::data::source 0.2} +See __transfer +Platform * +Desc {Data source} Package {transfer::copy 0.3} See __transfer Platform * Desc {Data transfer foundation} -Package {transfer::data::source 0.2} +Package {transfer::data::destination 0.2} See __transfer Platform * -Desc {Data source} +Desc {Data destination} Package {transfer::copy::queue 0.1} See __transfer Platform * Desc {Queued transfers} -Package {transfer::data::destination 0.2} -See __transfer -Platform * -Desc {Data destination} - -Package {transfer::receiver 0.2} +Package {transfer::transmitter 0.2} See __transfer Platform * Desc {Data source} -Package {transfer::transmitter 0.2} +Package {transfer::receiver 0.2} See __transfer Platform * Desc {Data source} Package {transfer::connect 0.2} @@ -4000,20 +4220,33 @@ # # ############### # ############ # Module "try" -# [1] | "try" (1) +# [1] | "throw" (1) +# [2] | "try" (1) # -------+ -Package {try 1} +Package {__try 0.0} Platform * -Desc {try - Trap and process errors and exceptions} +Desc {Forward compatibility implementation of [try], Forward compatibility implementation of [throw]} +Hidden Base @TAP_DIR@/try Path pkgIndex.tcl +Path throw.tcl Path try.tcl +Package {throw 1} +See __try +Platform * +Desc {throw - Throw an error exception with a message} + +Package {try 1} +See __try +Platform * +Desc {try - Trap and process errors and exceptions} + # # ############ # ############ # Module "uev" @@ -4058,11 +4291,11 @@ # # ############## # ############ # Module "uri" -# [1] | "uri" (1.2.5) +# [1] | "uri" (1.2.6) # [2] | "uri::urn" (1.0.3) # -------+ Package {__uri 0.0} Platform * @@ -4071,11 +4304,11 @@ Base @TAP_DIR@/uri Path pkgIndex.tcl Path uri.tcl Path urn-scheme.tcl -Package {uri 1.2.5} +Package {uri 1.2.6} See __uri Platform * Desc {URI utilities} Package {uri::urn 1.0.3} @@ -4086,14 +4319,14 @@ # # ############ # ############# # Module "uuid" -# [1] | "uuid" (1.0.4) +# [1] | "uuid" (1.0.5) # -------+ -Package {uuid 1.0.4} +Package {uuid 1.0.5} Platform * Desc {UUID generation and comparison} Base @TAP_DIR@/uuid Path pkgIndex.tcl Path uuid.tcl @@ -4105,16 +4338,16 @@ # Module "valtype" # [1] | "valtype::creditcard::mastercard" (1) # [2] | "valtype::usnpi" (1) # [3] | "valtype::creditcard::discover" (1) # [4] | "valtype::common" (1) -# [5] | "valtype::isbn" (1) -# [6] | "valtype::imei" (1) -# [7] | "valtype::creditcard::amex" (1) -# [8] | "valtype::creditcard::visa" (1) -# [9] | "valtype::gs1::ean13" (1) -# [10] | "valtype::luhn" (1) +# [5] | "valtype::imei" (1) +# [6] | "valtype::isbn" (1) +# [7] | "valtype::creditcard::visa" (1) +# [8] | "valtype::creditcard::amex" (1) +# [9] | "valtype::luhn" (1) +# [10] | "valtype::gs1::ean13" (1) # [11] | "valtype::iban" (1.5) # [12] | "valtype::luhn5" (1) # [13] | "valtype::verhoeff" (1) # -------+ @@ -4156,40 +4389,40 @@ Package {valtype::common 1} See __valtype Platform * Desc {Validation, common code} +Package {valtype::imei 1} +See __valtype +Platform * +Desc {Validation for IMEI} + Package {valtype::isbn 1} See __valtype Platform * Desc {Validation for ISBN} -Package {valtype::imei 1} +Package {valtype::creditcard::visa 1} See __valtype Platform * -Desc {Validation for IMEI} +Desc {Validation for VISA creditcard number} Package {valtype::creditcard::amex 1} See __valtype Platform * Desc {Validation for AMEX creditcard number} -Package {valtype::creditcard::visa 1} +Package {valtype::luhn 1} See __valtype Platform * -Desc {Validation for VISA creditcard number} +Desc {Validation for plain number with a LUHN checkdigit} Package {valtype::gs1::ean13 1} See __valtype Platform * Desc {Validation for EAN13} -Package {valtype::luhn 1} -See __valtype -Platform * -Desc {Validation for plain number with a LUHN checkdigit} - Package {valtype::iban 1.5} See __valtype Platform * Desc {Validation for IBAN} @@ -4209,20 +4442,20 @@ # ######################### # Module "virtchannel_base" # [1] | "tcl::chan::std" (1.0.1) # [2] | "tcl::chan::fifo" (1) # [3] | "tcl::chan::cat" (1.0.2) -# [4] | "tcl::chan::random" (1) -# [5] | "tcl::chan::halfpipe" (1) +# [4] | "tcl::chan::halfpipe" (1) +# [5] | "tcl::chan::random" (1) # [6] | "tcl::chan::memchan" (1.0.3) -# [7] | "tcl::chan::nullzero" (1) -# [8] | "tcl::chan::null" (1) +# [7] | "tcl::chan::null" (1) +# [8] | "tcl::chan::nullzero" (1) # [9] | "tcl::chan::facade" (1.0.1) # [10] | "tcl::randomseed" (1) # [11] | "tcl::chan::textwindow" (1) -# [12] | "tcl::chan::variable" (1.0.3) -# [13] | "tcl::chan::fifo2" (1) +# [12] | "tcl::chan::fifo2" (1) +# [13] | "tcl::chan::variable" (1.0.3) # [14] | "tcl::chan::string" (1.0.2) # [15] | "tcl::chan::zero" (1) # -------+ Package {__virtchannel_base 0.0} @@ -4260,35 +4493,35 @@ Package {tcl::chan::cat 1.0.2} See __virtchannel_base Platform * Desc {Concatenation channel} +Package {tcl::chan::halfpipe 1} +See __virtchannel_base +Platform * +Desc {In-memory channel, half of a fifo2} + Package {tcl::chan::random 1} See __virtchannel_base Platform * Desc {Random channel} -Package {tcl::chan::halfpipe 1} -See __virtchannel_base -Platform * -Desc {In-memory channel, half of a fifo2} - Package {tcl::chan::memchan 1.0.3} See __virtchannel_base Platform * Desc {In-memory channel} + +Package {tcl::chan::null 1} +See __virtchannel_base +Platform * +Desc {Null channel} Package {tcl::chan::nullzero 1} See __virtchannel_base Platform * Desc {Null/Zero channel combination} -Package {tcl::chan::null 1} -See __virtchannel_base -Platform * -Desc {Null channel} - Package {tcl::chan::facade 1.0.1} See __virtchannel_base Platform * Desc {Facade channel} @@ -4300,20 +4533,20 @@ Package {tcl::chan::textwindow 1} See __virtchannel_base Platform * Desc {Textwindow channel} +Package {tcl::chan::fifo2 1} +See __virtchannel_base +Platform * +Desc {In-memory interconnected fifo channels} + Package {tcl::chan::variable 1.0.3} See __virtchannel_base Platform * Desc {In-memory channel using variable for storage} -Package {tcl::chan::fifo2 1} -See __virtchannel_base -Platform * -Desc {In-memory interconnected fifo channels} - Package {tcl::chan::string 1.0.2} See __virtchannel_base Platform * Desc {Read-only in-memory channel} @@ -4326,12 +4559,12 @@ # ######################### # ######################### # Module "virtchannel_core" # [1] | "tcl::transform::core" (1) -# [2] | "tcl::chan::core" (1) -# [3] | "tcl::chan::events" (1) +# [2] | "tcl::chan::events" (1) +# [3] | "tcl::chan::core" (1) # -------+ Package {__virtchannel_core 0.0} Platform * Desc {Reflected/virtual channel support} @@ -4345,28 +4578,28 @@ Package {tcl::transform::core 1} See __virtchannel_core Platform * Desc {Basic reflected/virtual channel transform support} +Package {tcl::chan::events 1} +See __virtchannel_core +Platform * +Desc {Event support for reflected/virtual channels} + Package {tcl::chan::core 1} See __virtchannel_core Platform * Desc {Basic reflected/virtual channel support} -Package {tcl::chan::events 1} -See __virtchannel_core -Platform * -Desc {Event support for reflected/virtual channels} - # # ######################### # ############################## # Module "virtchannel_transform" # [1] | "tcl::transform::zlib" (1.0.1) -# [2] | "tcl::transform::identity" (1) -# [3] | "tcl::transform::limitsize" (1) +# [2] | "tcl::transform::limitsize" (1) +# [3] | "tcl::transform::identity" (1) # [4] | "tcl::transform::otp" (1) # [5] | "tcl::transform::base64" (1) # [6] | "tcl::transform::crc32" (1) # [7] | "tcl::transform::rot" (1) # [8] | "tcl::transform::adler32" (1) @@ -4397,21 +4630,21 @@ Package {tcl::transform::zlib 1.0.1} See __virtchannel_transform Platform * Desc {zlib (de)compression} + +Package {tcl::transform::limitsize 1} +See __virtchannel_transform +Platform * +Desc {limiting input} Package {tcl::transform::identity 1} See __virtchannel_transform Platform * Desc {Identity transformation} -Package {tcl::transform::limitsize 1} -See __virtchannel_transform -Platform * -Desc {limiting input} - Package {tcl::transform::otp 1} See __virtchannel_transform Platform * Desc {Encryption via one-time pad} @@ -4501,57 +4734,72 @@ # # ############ # ############# # Module "yaml" -# [1] | "huddle" (0.1.5) -# [2] | "yaml" (0.3.7) +# [1] | "huddle::json" (0.1) +# [2] | "huddle" (0.2) +# [3] | "yaml" (0.3.9) # -------+ Package {__yaml 0.0} Platform * Desc {YAML processing, HUDDLE} Hidden Base @TAP_DIR@/yaml Path huddle.tcl +Path huddle_types.tcl +Path json2huddle.tcl Path pkgIndex.tcl Path yaml.tcl -Package {huddle 0.1.5} +Package {huddle::json 0.1} +See __yaml +Platform * +Desc {Tcllib package} + +Package {huddle 0.2} See __yaml Platform * Desc {Create and manipulate huddle object} -Package {yaml 0.3.7} +Package {yaml 0.3.9} See __yaml Platform * Desc {YAML Format Encoder/Decoder} # # ############# # ############ # Module "zip" -# [1] | "zipfile::encode" (0.3) -# [2] | "zipfile::decode" (0.6.1) +# [1] | "zipfile::encode" (0.4) +# [2] | "zipfile::mkzip" (1.2) +# [3] | "zipfile::decode" (0.7) # -------+ Package {__zip 0.0} Platform * -Desc {Zip archive handling} +Desc {Zip archive creation, Zip archive handling} Hidden Base @TAP_DIR@/zip Path decode.tcl Path encode.tcl +Path mkzip.tcl Path pkgIndex.tcl -Package {zipfile::encode 0.3} +Package {zipfile::encode 0.4} See __zip Platform * Desc {Generation of zip archives} -Package {zipfile::decode 0.6.1} +Package {zipfile::mkzip 1.2} +See __zip +Platform * +Desc {Build a zip archive} + +Package {zipfile::decode 0.7} See __zip Platform * Desc {Access to zip archives} # Index: tcllib.yml ================================================================== --- tcllib.yml +++ tcllib.yml @@ -1,7 +1,7 @@ dist_id: tcllib -version: 1.17 +version: 1.18 language: tcl description: | This package is intended to be a collection of Tcl packages that provide utility functions useful to a large collection of Tcl programmers. @@ -15,6 +15,6 @@ - Library/Mail - Library/Cryptography - Library/Math license: BSD owner_id: AndreasKupries -wrapped_content: tcllib-1.17/ +wrapped_content: tcllib-1.18/