Updated 2018-02-07 23:27:43 by ak

A Tcl repository is a isn't really a repository. This page should be phased out into more appropriate pages.

Description  edit

Policy: If you want to add an extension or an application, simply select the proper category, add the name and a short description and include a link as to where it can be found.

AM: I created this page, 26 September 2006, because I realised that the Wiki is, with all its flaws, disorder and general unstructuredness a wonderful place that everybody can contribute to. It is very easy to add or correct information, the infrastructure to do this is all there. So, this page may not be the best repository the Tcl community can wish for, it is at least an easy one to maintain!

Catalogs  edit

French Tcl Wiki
contains an overview of Tcl/Tk applications at http://wfr.tcl.tk/...
Applications in Tcl and Tcl/Tk
provides a similar overview in English
Applications using Tile
demonstrates the look and feel of Tile widgets (see also the Widget category)
The GUTTER
Great Unified Tcl/Tk Extension Repository
Korea Tcl/Tk Community Package Catalog

Tcl Package Managers and Repositories  edit

Cantcl
Tcl-Pkg
a browsing/downloading tool for Tcl apps and extensions.
Simple Tcl Archive Network (STAN)
Procplace
Tcl Extension Archive
A component of ActiveTcl. TEApot is the server, and Teacup is the client

Other Repositories  edit

mirrors of various repositories of interest, by aku

Databases  edit

See Interacting with databases

Debugging Tools  edit

See debugging

Documentation and Tutorials  edit

official Tcl reference
Detailed documentation of the various Tcl commands.
Tcl tutor
A GUI program that provides Tcl lessons at three levels
tcltutorial
The official Tcl tutorial. Derived from Tcltutor
oficial Tk reference
Detailed documentation of the various Tk commands

Editors and Integrated Development Environments (IDE)  edit

See IDE

Graphics  edit

Img
Extension to read and store pictures in various file formats
Plplot
Library for creating scientific plots (xy graphs, contour maps in 2D and 3D, ...). Output to various file formats or screen, bindings to numerous programming languages
TclMagick
Tcl front-end for the ImageMagick package, so you can create new pictures from existing ones, add text or merge pictures etc.
Tk3D
Tcl/Tk front-end for the OpenGL graphics libraries. Makes it possible to define and render three-dimensional pictures.
Tklib's Plotchart
Tcl-only package for presenting data in the form of xy graphs, histograms and contour maps
Tkzinc
Alternative to the canvas widget, 2D visualisation of numerous objects, uses OpenGL if available.
3dcanvas
a widget that implements a three dimensional space in which structured graphics can be rendered.
TclRFB
a pure-Tcl implementation of the Remote Framebuffer (RFB) protocol that is used in the Virtual Network Computing (VNC) remote desktop application.
TkOGL OpenGL widget
a package extension to the Tcl scripting language that enables a user to utilize OpenGL.
Vtk
a powerful engine for scientific visualization.
GD
A Graphic Library. Contains bindings for Tcl and can be used to create gif, jpeg and png files on the fly.
Tcl3D
enables the 3D functionality of OpenGL and other 3D libraries at the Tcl scripting level.

Mathematics and Numerical Analysis  edit

LA
Classical implementation of linear algebra in Tcl
NAP
"N-dimensional array processing", lets you manipulate large amounts of data with simple commands
Tcllib's math
Implementation of various mathematical packages in Tcl (solving differential equations, geometry, linear algebra, special functions)

Libraries  edit

tcllib
a semi-official collection of pure Tcl packages
Tclrep
a Sourceforge project for pure-Tcl packages
ycl
contains a variety of Tcl commands

Object-oriented Programming  edit

See Object Orientation

Office Automation  edit

tcom
Using COM objects via Tcl - useful for reading and writing MS Excel sheets for instance
tcluno
Tcl connection to Open Office

System Administration  edit

Expect
The Tcl application, allows you to automate interactive remote console (shell) tasks.
Scotty
TclUDP
Allows the use of UDP sockets (the core only provides TCP/IP)
MOOMPS
Monitoring software
qmon
nagios-compatible monitoring software

Tcl and Other Languages  edit

Critcl
Extending Tcl on the fly using C functions
ftcl
Hecl
A language derived from Tcl, implemented in Java, for cellular phones
Jacl
Re-implementation of Tcl in Java
Jim
Lean re-implementation of Tcl, with a very small memory foot-print
TclBlend
Bridge between Tcl and Java

Widgets  edit

BWidget
Collection of widgets implemented purely in Tcl/Tk
GridPlus2
Layout and extensions to grid; many useful features. Good documentation.
Tklib's ctext
Text editing widget with facilities for syntax highlighting
Tklib's plotchart
plots and charts
Tklib's tablelist
multilist box widget for tables
Tklib's tkpiechart
Tklib's tooltip
balloon help widgets
Tklib's widget
megawidgets by Jeff Hobbs.
IWidgets
widgets based on the [incr Tcl] and [incr Tk] extensions
Tablelist
Display and manipulate data in a tabular form (also part of Tklib)
TLC
Yet another collection of widgets
Ttk
Implementation of the Tk theming engine to provide native look and feel widgets, now included in Tk 8.5
BLT
Collection of widgets
Tix
Collection of widgets
mkWidgets
Collection of widgets

Wrappers for Easy Deployment  edit

Freewrap
An Open-source wrapper/stand-alone executable.
Tclkit
Complete stand-alone Tcl/Tk executable with Incr Tcl. Can wrap applications into Starkits or Starpacks.

Miscellanea  edit

SYStems mmm ... no. For one we already have the gutter [1] if any work is to be done, I recommend it be done to improve our gutter make it work like debian's apt-get or Perl's CPAN (i.e. work on the command line interface, or the Tk interface ;))

AM: This page is not meant to replace gutter - not at all! It is just that due to the lack of an obvious central repository people can not find what they are looking for. This page is merely meant as a guide.

SYStems: The gutter (if it succeed) should be the Obvious destination to look (and add) for packages & to find information about packages. Plus a single wiki page just isn't practical or pretty. Look at the ask and it shall be give pages, I think they are horrible, a wiki can't replace a forum, a wiki can't replace a package repository either.

I'm rather uncertain what the OP and others want on this page. In the past, there have been, and continue to be, pages with long lists of tcl extensions and applications. Why start yet another one?

I can understand why one might want to have one page listing the various repositories - but why start a parallel page on this wiki for this sort of thing?

DKF: A PACKAGE FETCHING SCRIPT

Based on my recent rant [?] on comp.lang.tcl, here's a script that implements the sort of thing which I'm really looking for on the client side. Note that it uses a fair number of Tcl 8.5 features; this is deliberate.
package require Tcl 8.5
package require http 2

namespace eval pkgutil {
    namespace export "\[a-z]*"
    namespace ensemble create

    variable repository http://repository.tcl.tk/packages

    proc listPackages {{pattern *}} {
       variable repository
       # We pass the pattern, but the repository MAY ignore it
       set token [http::geturl $repository?[http::formatQuery pat $pattern]]
       if {![string match 2?? [http::ncode $token]]} {
          set msg [join [lrange [split [http::code $token]] 2 end]]
          http::cleanup $token
          return -code error $msg
       }
       set result {}
       foreach pkgName [lsort [split [http::data $token]]] {
          if {[string match $pattern $pkgName]} {
             lappend result $pkgName
          }
       }
       http::cleanup $token
       return $result
    }
    proc listVersions {pkgName {pattern *}} {
       variable repository
       # We pass the pattern, but the repository MAY ignore it
       set token [http::geturl \
             $repository/$pkgName?[http::formatQuery pat $pattern]]
       if {![string match 2?? [http::ncode $token]]} {
          set msg [join [lrange [split [http::code $token]] 2 end]]
          http::cleanup $token
          return -code error $msg
       }
       set result {}
       foreach version [lsort [split [http::data $token]]] {
          if {[string match $pattern $version]} {
             lappend result $version
          }
       }
       http::cleanup $token
       return $result
    }
    proc listPlatforms {pkgName version {pattern *}} {
       variable repository
       # We pass the pattern, but the repository MAY ignore it
       set token [http::geturl \
             $repository/$pkgName/$version?[http::formatQuery pat $pattern]]
       if {![string match 2?? [http::ncode $token]]} {
          set msg [join [lrange [split [http::code $token]] 2 end]]
          http::cleanup $token
          return -code error $msg
       }
       set result {}
       foreach platform [lsort [split [http::data $token]]] {
          if {[string match $pattern $platform]} {
             lappend result $platform
          }
       }
       http::cleanup $token
       return $result
    }
    proc fetch {pkgName version platform {targetFilename ~}} {
       if {[file isdirectory $targetFilename]} {
          set targetFilename [file join $targetFilename $pkgName-$version.tm]
       }
       set out [open $targetFilename wb]
       set url $repository/$pkgName/$version/$platform/$pkgName-$version.tm
       for {set i 0} {$i<5} {incr i} {
          set token [http::geturl $url -binary 1 -channel $out $url]
          if {![string match 3?? [http::ncode $token]]} {
             break
          }
          # Follow redirects a few times (the loop around this)
          set url [dict get [array get $token] meta Location]
          http::cleanup $token
       }
       if {![string match 2?? [http::ncode $token]]} {
          set msg [join [lrange [split [http::code $token]] 2 end]]
          http::cleanup $token
          return -code error $msg
       }
       http::cleanup $token
       close $out
    }
}

package provide pkgutil 0.1

SC: This sort of functionality has been available in the CANTCL code since the start, eg:
# installer::install_extension --
#
#   Download a zip file contianing a tcl extension from the given 
#   uri and install it in the current tcl installation.
#
# Arguments:
#   uri        -- the location of the zip file
# Results:
#   The file is downloaded, installed and the local copy is deleted

This is in the installer package, you can still browse the code via cantcl at http://www.ics.mq.edu.au/~cassidy/cgi-bin/cantcl/package/installer-0.6/tcl along with a bunch of other utilities. The CANTCL package manages the server side of this.

EXTENSION SOURCES 20070907  edit

LV 2009-09-18

Note that since the above list is manually maintained, some of the versions mentioned may not be the latest available - or for that matter, may not be available at all, in the case of the equi4.com URLs.