Porting extensions to Tcl 9

Difference between version 45 and 46 - Previous - Next
[PO] - Update on 2024-12-28 incorporating remarks and comments.

This page is the summary of my experiences trying to port the Tcl packages or
programs supported by [BAWT] to Tcl9.
The packages listed below are part of the new BAWT 3.0.0 release.

The following Tcl and Tk versions have been used for the porting tests:
+++
Tcl 9.0.1  Official release 
Tk 9.0.1   Official release
+++

   * Table `Packages` lists all packages looked at and their current status.
   * Table `Changes in Tcl` summarizes all changes done at the Tcl level for all packages.
   * Table `Changes in C` summarizes all changes done at the C level for all packages.
   * All other tables summarize the changes done for each individual package or program.

The tables below are based on the following Excel file: https://www.tcl3d.org/bawt/download/Tcl9-Port.xlsx

Please feel free to add your experiences, additions and comments.

----
Other porting experiences:

   * Migrating scripts to Tcl 9  [https://core.tcl-lang.org/tcl/wiki?name=Migrating%20scripts%20to%20Tcl%209]
   * Migrating C extensions to Tcl 9  [https://core.tcl-lang.org/tcl/wiki?name=Migrating%20C%20extensions%20to%20Tcl%209]
   * [Rolf Ade]'s EuroTcl2023 presentation [https://openacs.org/conf2023/info/download/file/porting-tcllib-tcl9.pdf%|%Porting tcllib to Tcl 9]
   * [aplsimple]'s Moving to Tcl 9.0 [https://aplsimple.github.io/en/tcl/misc/movetcl90.html]
   * [Extensions ready for Tcl 9]

Porting tools:

   * [Tcl 9 functions using Tcl_Size]
   * Migration tool for Tcl 9 [https://github.com/apnadkarni/tcl9-migrate]
----



<<toc>>


**Packages**


This table summarizes the status of the package ports.

The columns show the folllowing information:
   * '''Package:''' The name and a link to the package home page.
   * '''Start version:''' The version number and a link to the source of the package as used for start of the porting or the working Tcl 9 version.
   * '''Ported version:''' The version number and a link to the source of the ported package. If entry is `Works`, then the Start version is working. If entry is `NoTcl9`, I either did not look at the package or it was too much effort.
   * '''Build:''' The modified package could be compiled with Tcl 9.
   * '''Require:''' A `package require` suceeded for the package with Tcl 9.
   * '''Bawt Test:''' The simple BAWT test program for this package works with Tcl 9.
   * '''Responsible:''' The name or link of the package maintainer.
   * '''Active Tcl9 Development:''' Flag indicating active Tcl9 development.
   * '''Comments:''' Short comments regarding this package. Add longer comments at the end of the table.

Note, that the ported versions also work with Tcl/Tk 8.6.16.


%| Package | Start version | Ported version | Build | Require | Bawt Test | Responsible | Active Tcl9 Development | Comments|%
&|https://www.cmake.org/%|%CMake%|%|https://www.tcl3d.org/bawt/download/InputLibs/CMake-3.25.2.7z%|%3.25.2%|%|`Works`|`Yes`|`N/A`|`N/A`||`No`|Works with simple patch applied in BAWT Build script.|&
&|http://www.swig.org/%|%SWIG%|%|https://www.tcl3d.org/bawt/download/InputLibs/SWIG-4.3.0.7z%|%4.3.0%|%|`Works`|`Yes`|`N/A`|`N/A`|[PO]|`Yes`||&
&|https://aplsimple.github.io/en/tcl/pave/index.html%|%apave%|%|https://www.tcl3d.org/bawt/download/InputLibs/apave-4.4.10.7z%|%4.4.10%|%|`Works`|`Yes`|`Yes`|`Yes`|[aplsimple]|`Yes`||&
&|https://sourceforge.net/projects/tcl-awthemes/%|%awthemes%|%|https://www.tcl3d.org/bawt/download/InputLibs/awthemes-10.4.0.7z%|%10.4.0%|%|`Works`|`Yes`|`Yes`|`Yes`||`No`||&
&|https://core.tcl-lang.org/bwidget/%|%BWidget%|%|https://www.tcl3d.org/bawt/download/InputLibs/BWidget-1.10.1.7z%|%1.10.1%|%|`Works`|`Yes`|`Yes`|`Yes`|[oehhar]|`Yes`||&
&|http://3dcanvas.tcl-lang.org/%|%Canvas3d%|%|https://www.tcl3d.org/bawt/download/InputLibs/Canvas3d-1.2.2.7z%|%1.2.2%|%|https://www.tcl3d.org/bawt/download/InputLibs/Canvas3d-1.2.3.7z%|%1.2.3%|%|`Yes`|`Yes`|`No`||`No`||&
&|https://www.tcl3d.org/cawt/%|%cawt%|%|https://www.tcl3d.org/bawt/download/InputLibs/cawt-3.0.0.7z%|%3.0.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[PO]|`Yes`|Needs Twapi 5.0 for Tcl 9.|&
&|https://github.com/apnadkarni/tcl-cffi%|%cffi%|%|https://www.tcl3d.org/bawt/download/InputLibs/cffi-2.0.3.7z%|%2.0.3%|%|`Works`|`Yes`|`Yes`|`Yes`|[APN]|`Yes`||&
&|https://andreas-kupries.github.io/critcl/%|%critcl%|%|https://www.tcl3d.org/bawt/download/InputLibs/critcl-3.3.7z%|%3.3%|%|`Works`|`Yes`|`Yes`|`N/A`|[AK]|`Yes`||&
&|https://github.com/pspjuth/DiffUtilTcl/%|%DiffUtil%|%|https://www.tcl3d.org/bawt/download/InputLibs/DiffUtil-0.4.2.7z%|%0.4.2%|%|https://www.tcl3d.org/bawt/download/InputLibs/DiffUtil-0.4.3.7z%|%0.4.3%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://sourceforge.net/projects/expect/%|%expect%|%|https://www.tcl3d.org/bawt/download/InputLibs/expect-5.45.4.7z%|%5.45.4%|%|https://www.tcl3d.org/bawt/download/InputLibs/expect-5.45.4.1.7z%|%5.45.4.1%|%|`Yes`|`Yes`|`Yes`||`No`|Not working with gcc >= 14. Port supplied by Steve Shaw.|&
&|https://github.com/prs-de/ffidl%|%ffidl%|%|https://www.tcl3d.org/bawt/download/InputLibs/Ffidl-0.9.0.7z%|%0.9.0%|%|https://www.tcl3d.org/bawt/download/InputLibs/Ffidl-0.9.1.7z%|%0.9.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://heasarc.gsfc.nasa.gov/docs/software/ftools/fv/fitsTcl_home.html%|%fitsTcl%|%|https://www.tcl3d.org/bawt/download/InputLibs/fitsTcl-2.5.7z%|%2.5%|%|https://www.tcl3d.org/bawt/download/InputLibs/fitsTcl-2.5.1.7z%|%2.5.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|http://www.schwartzcomputer.com/tcl-tk/tcl-tk.html%|%gdi%|%|https://www.tcl3d.org/bawt/download/InputLibs/gdi-0.9.9.15.7z%|%0.9.9.15%|%|`Works`|`Yes`|`Yes`|`N/A`||`No`||&
&|https://github.com/zdia/gorilla/wiki%|%gorilla%|%|https://www.tcl3d.org/bawt/download/InputLibs/gorilla-1.6.0.7z%|%1.6.0%|%|https://www.tcl3d.org/bawt/download/InputLibs/gorilla-1.6.1.7z%|%1.6.1%|%|`Yes`|`Yes`|`N/A`||`No`||&
&|http://www.schwartzcomputer.com/tcl-tk/tcl-tk.html%|%hdc%|%|https://www.tcl3d.org/bawt/download/InputLibs/hdc-0.2.0.1.7z%|%0.2.0.1%|%|`Works`|`Yes`|`Yes`|`N/A`||`No`||&
&|https://tkimg.sourceforge.net/%|%Img%|%|https://www.tcl3d.org/bawt/download/InputLibs/Img-2.0.1.7z%|%2.0.1%|%|`Works`|`Yes`|`Yes`|`Yes`|[PO]|`Yes`||&
&|https://www.androwish.org/home/dir?name=jni/imgjp2%|%imgjp2%|%|https://www.tcl3d.org/bawt/download/InputLibs/imgjp2-0.1.7z%|%0.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/imgjp2-0.1.1.7z%|%0.1.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://tkimgtools.sourceforge.net/%|%imgtools%|%|https://www.tcl3d.org/bawt/download/InputLibs/imgtools-0.3.7z%|%0.3%|%|https://www.tcl3d.org/bawt/download/InputLibs/imgtools-0.3.1.7z%|%0.3.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://github.com/apnadkarni/iocp/%|%iocp%|%|https://www.tcl3d.org/bawt/download/InputLibs/iocp-2.0.2.7z%|%2.0.2%|%|`Works`|`Yes`|`Yes`|`Yes`|[APN]|`Yes`||&
&|https://core.tcl-lang.org/itk/%|%itk%|%|https://www.tcl3d.org/bawt/download/InputLibs/itk-4.2.5.7z%|%4.2.5%|%|`Works`|`Yes`|`Yes`|`Yes`|core.tcl-lang.org|`Yes`||&
&|https://sourceforge.net/projects/incrtcl/%|%iwidgets%|%|https://www.tcl3d.org/bawt/download/InputLibs/iwidgets-4.1.1.7z%|%4.1.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/iwidgets-4.1.2.7z%|%4.1.2%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://www.androwish.org/home/dir?ci=tip&name=assets/materialicons0.2%|%materialicons%|%|https://www.tcl3d.org/bawt/download/InputLibs/materialicons-0.2.7z%|%0.2%|%|`Works`|`Yes`|`Yes`|`Yes`||`No`||&
&|https://www.tcl3d.org/mawt/%|%mawt%|%|https://www.tcl3d.org/bawt/download/InputLibs/mawt-0.4.4.7z%|%0.4.4%|%|`Works`|`Yes`|`Yes`|`Yes`|[PO]|`Yes`||&
&|https://memchan.sourceforge.net/%|%memchan%|%|https://www.tcl3d.org/bawt/download/InputLibs/memchan-2.3.7z%|%2.3%|%|https://www.tcl3d.org/bawt/download/InputLibs/memchan-2.3.1.7z%|%2.3.1%|%|`Yes`|`Yes`|`No`||`No`||&
&|http://www.nemethi.de/%|%mentry%|%|https://www.tcl3d.org/bawt/download/InputLibs/mentry-4.3.1.7z%|%4.3.1%|%|`Works`|`Yes`|`Yes`|`Yes`|[nemethi]|`Yes`|Also part of tklib.|&
&|https://sourceforge.net/projects/mpexpr/%|%Mpexpr%|%|https://www.tcl3d.org/bawt/download/InputLibs/Mpexpr-1.2.7z%|%1.2%|%|https://www.tcl3d.org/bawt/download/InputLibs/Mpexpr-1.2.1.7z%|%1.2.1%|%|`Yes`|`Yes`|`Yes`||`No`|Not working with gcc 14.|&
&|https://chiselapp.com/user/schelte/repository/mqtt/home%|%mqtt%|%|https://www.tcl3d.org/bawt/download/InputLibs/mqtt-4.0.7z%|%4.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[sbron]|`Yes`||&
&|https://sourceforge.net/projects/irrational-numbers/%|%MuPDFWidget%|%|https://www.tcl3d.org/bawt/download/InputLibs/MuPDFWidget-2.3.2.7z%|%2.3.2%|%|`Works`|`Yes`|`Yes`|`Yes`|[ABU]|`Yes`||&
&|https://tcl.sowaswie.de/repos/fossil/nacl/home%|%nacl%|%|https://www.tcl3d.org/bawt/download/InputLibs/nacl-1.1.7z%|%1.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/nacl-1.1.1.7z%|%1.1.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://next-scripting.org%|%nsf%|%|https://www.tcl3d.org/bawt/download/InputLibs/nsf-2.4.0.7z%|%2.4.0%|%|`NoTcl9`|`No`|`No`|`No`|[Gn]|`Yes`|Repository version working. No official release yet.|&
&|https://fossil.sowaswie.de/ooxml/home%|%ooxml%|%|https://www.tcl3d.org/bawt/download/InputLibs/ooxml-1.9.7z%|%1.9%|%|`Works`|`Yes`|`Yes`|`Yes`|[ALX]|`Yes`||&
&|https://oratcl.sourceforge.net%|%oratcl%|%|https://www.tcl3d.org/bawt/download/InputLibs/oratcl-4.6.7z%|%4.6%|%|https://www.tcl3d.org/bawt/download/InputLibs/oratcl-4.6.1.7z%|%4.6.1%|%|`Yes`|`Yes`|`N/A`||`No`|Port supplied by Steve Shaw.|&
&|https://github.com/RubyLane/parse_args%|%parse_args%|%|https://www.tcl3d.org/bawt/download/InputLibs/parse_args-0.5.1.7z%|%0.5.1%|%|`Works`|`Yes`|`Yes`|`Yes`|[cyan]|`Yes`|Added missing Tcl_Size.|&
&|https://www.tcl3d.org/pawt/%|%pawt%|%|https://www.tcl3d.org/bawt/download/InputLibs/pawt-1.1.4.7z%|%1.1.4%|%|`Works`|`Yes`|`Yes`|`Yes`|[PO]|`Yes`||&
&|https://sourceforge.net/projects/pdf4tcl/%|%pdf4tcl%|%|https://www.tcl3d.org/bawt/download/InputLibs/pdf4tcl-0.9.4.7z%|%0.9.4%|%|`Works`|`Yes`|`Yes`|`Yes`|[Peter Spjuth]|`Yes`||&
&|https://sourceforge.net/projects/pgintcl/%|%pgintcl%|%|https://www.tcl3d.org/bawt/download/InputLibs/pgintcl-3.5.1.7z%|%3.5.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/pgintcl-3.5.2.7z%|%3.5.2%|%|`Yes`|`Yes`|`N/A`||`No`||&
&|https://github.com/auriocus/PhotoResize%|%photoresize%|%|https://www.tcl3d.org/bawt/download/InputLibs/photoresize-0.2.7z%|%0.2%|%|https://www.tcl3d.org/bawt/download/InputLibs/photoresize-0.2.1.7z%|%0.2.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://www.tcl3d.org/poApps/%|%poApps%|%|https://www.tcl3d.org/bawt/download/InputLibs/poApps-3.0.0.7z%|%3.0.0%|%|`Works`|`Yes`|`Yes`|`N/A`|[PO]|`Yes`||&
&|https://www.tcl3d.org/poPkgs/poImg.html%|%poImg%|%|https://www.tcl3d.org/bawt/download/InputLibs/poImg-2.1.0.7z%|%2.1.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[PO]|`Yes`||&
&|https://www.tcl3d.org/poPkgs/poMemory.html%|%poMemory%|%|https://www.tcl3d.org/bawt/download/InputLibs/poMemory-1.0.0.7z%|%1.0.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[PO]|`Yes`||&
&|http://www.schwartzcomputer.com/tcl-tk/tcl-tk.html%|%printer%|%|https://www.tcl3d.org/bawt/download/InputLibs/printer-0.9.6.15.7z%|%0.9.6.15%|%|https://www.tcl3d.org/bawt/download/InputLibs/printer-0.9.6.16.7z%|%0.9.6.16%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://www.androwish.org/home/dir?ci=tip&name=undroid/puppyicons0.1%|%puppyicons%|%|https://www.tcl3d.org/bawt/download/InputLibs/puppyicons-0.1.7z%|%0.1%|%|`Works`|`Yes`|`Yes`|`Yes`||`No`||&
&|https://www.sourceforge.net/projects/rbctoolkit/%|%rbc%|%|https://www.tcl3d.org/bawt/download/InputLibs/rbc-0.2.7z%|%0.2%|%|`NoTcl9`|`No`|`No`|`No`||`No`|See package tko::graph as replacement.|&
&|https://github.com/RubyLane/rl_json%|%rl_json%|%|https://www.tcl3d.org/bawt/download/InputLibs/rl_json-0.11.5.7z%|%0.11.5%|%|https://www.tcl3d.org/bawt/download/InputLibs/rl_json-0.11.6.7z%|%0.11.6%|%|`Yes`|`No`|`No`||`No`|Newer version 0.15.1 not Tcl 9 ready. |&
&|https://chiselapp.com/user/fvogel/repository/rtext%|%rtext%|%|https://www.tcl3d.org/bawt/download/InputLibs/rtext-0.1.7z%|%0.1%|%|`Works`|`Yes`|`Yes`|`Yes`||`Yes`|Current trunk.|&
&|https://ruff.magicsplat.com/%|%ruff%|%|https://www.tcl3d.org/bawt/download/InputLibs/ruff-2.5.0.7z%|%2.5.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[APN]|`Yes`||&
&|http://www.nemethi.de/%|%scrollutil%|%|https://www.tcl3d.org/bawt/download/InputLibs/scrollutil-2.4.7z%|%2.4%|%|`Works`|`Yes`|`Yes`|`Yes`|[nemethi]|`Yes`|Also part of tklib.|&
&|http://wiki.tcl-lang.org/17859%|%shellicon%|%|https://www.tcl3d.org/bawt/download/InputLibs/shellicon-0.1.7z%|%0.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/shellicon-0.1.1.7z%|%0.1.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://github.com/scottypitcher/tcl-snack%|%Snack%|%|https://www.tcl3d.org/bawt/download/InputLibs/Snack-2.2.11.7z%|%2.2.11%|%|https://www.tcl3d.org/bawt/download/InputLibs/Snack-2.2.12.7z%|%2.2.12%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|http://www.nemethi.de/%|%tablelist%|%|https://www.tcl3d.org/bawt/download/InputLibs/tablelist-7.4.1.7z%|%7.4.1%|%|`Works`|`Yes`|`Yes`|`Yes`|[nemethi]|`Yes`|Also part of tklib.|&
&|https://github.com/ActiveState/teapot/tree/master/lib/tbcload%|%tbcload%|%|https://www.tcl3d.org/bawt/download/InputLibs/tbcload-1.7.1.7z%|%1.7.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/tbcload-1.7.2.7z%|%1.7.2%|%|`Yes`|`No`|`No`||`No`||&
&|https://www.tcl3d.org/%|%tcl3dBasic%|%|https://www.tcl3d.org/bawt/download/InputLibs/tcl3d-1.0.0.7z%|%1.0.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[PO]|`Yes`||&
&|https://github.com/apnadkarni/tcl9-migrate%|%tcl9migrate%|%|https://www.tcl3d.org/bawt/download/InputLibs/tcl9migrate-1.0.7z%|%1.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[APN]|`Yes`||&
&|https://sourceforge.net/projects/tcladdressbook/%|%Tcladdressbook%|%|https://www.tcl3d.org/bawt/download/InputLibs/Tcladdressbook-1.2.4.7z%|%1.2.4%|%|`NoTcl9`|`No`|`No`|`N/A`||`No`||&
&|https://sourceforge.net/projects/tclae/%|%tclAE%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclAE-2.0.7.7z%|%2.0.7%|%|`NoTcl9`|`No`|`No`|`N/A`||`No`||&
&|https://sourceforge.net/projects/tclapplescript/%|%Tclapplescript%|%|https://www.tcl3d.org/bawt/download/InputLibs/Tclapplescript-2.2.7z%|%2.2%|%|`NoTcl9`|`No`|`No`|`N/A`||`No`||&
&|http://www.chevreux.org/projects_tcl.html%|%tclargp%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclargp-0.2.7z%|%0.2%|%|`Works`|`Yes`|`Yes`|`Yes`||`No`||&
&|https://github.com/ActiveState/teapot/tree/master/lib/tclcompiler%|%tclcompiler%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclcompiler-1.7.3.7z%|%1.7.3%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclcompiler-1.7.4.7z%|%1.7.4%|%|`Yes`|`Yes`|`No`||`No`||&
&|https://sourceforge.net/projects/tclcsv%|%tclcsv%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclcsv-2.4.3.7z%|%2.4.3%|%|`Works`|`Yes`|`Yes`|`Yes`|[APN]|`Yes`||&
&|https://github.com/lamuzzachiodi/tclfpdf%|%tclfpdf%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclfpdf-1.6.7z%|%1.6%|%|`Works`|`Yes`|`Yes`|`Yes`||`No`||&
&|https://github.com/flightaware/tcl.gd%|%tclgd%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclgd-1.4.7z%|%1.4%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclgd-1.4.1.7z%|%1.4.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://sourceforge.net/projects/kbskit/%|%Tclkit%|%|`N/A`|`N/A`|`Yes`|`Yes`|`N/A`|[PO]|`No`||&
&|https://core.tcl-lang.org/tcllib%|%tcllib%|%|https://www.tcl3d.org/bawt/download/InputLibs/tcllib-2.0.7z%|%2.0%|%|`Works`|`Yes`|`Yes`|`Yes`|[aku]|`Yes`||&
&|https://sourceforge.net/projects/irrational-numbers/%|%tclMuPdf%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclMuPdf-2.4.3.7z%|%2.4.3%|%|`Works`|`Yes`|`Yes`|`Yes`|[ABU]|`Yes`||&
&|https://github.com/flightaware/TclProDebug/tree/master/lib/tclparser%|%tclparser%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclparser-1.8.7z%|%1.8%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclparser-1.8.1.7z%|%1.8.1%|%|`Yes`|`Yes`|`N/A`||`No`||&
&|https://github.com/aidanhs/libtclpy%|%tclpy%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclpy-0.4.7z%|%0.4%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclpy-0.4.1.7z%|%0.4.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://github.com/tclssg/tclssg%|%tclssg%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclssg-2.3.1.7z%|%2.3.1%|%|`Works`|`Yes`|`Yes`|`N/A`|[dbohdan]|`Yes`||&&|http://core.tcl-lang.org/tcltls/%|%tcltls%|%|https://www.tchisel3dapp.com/userg/bawt/downlohad/Igan/repuository/TCLibsTLS/uv/tcltls-2.0b1.7tar.22.7gz%|%2.0b1%|%|https://www.tcl3d.org/bawt/download/InputLibs/tcltls-1.7.23.7z%|%`Works%`|%|`Yes`|`Yes`|`Yes`|core.tcl-lang.org|`Yes`|Repository version 1.8. No oOfficial 2.0b1 release yet.|&
&|https://sourceforge.net/projects/tclvfs/%|%tclvfs%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclvfs-1.4.2.7z%|%1.4.2%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclvfs-1.4.3.7z%|%1.4.3%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://core.tcl-lang.org/tclws/%|%tclws%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclws-3.5.0.7z%|%3.5.0%|%|`Works`|`Yes`|`Yes`|`N/A`|[oehhar]|`Yes`||&
&|https://github.com/flightaware/tclx/%|%tclx%|%|https://www.tcl3d.org/bawt/download/InputLibs/tclx-8.4.4.7z%|%8.4.4%|%|`NoTcl9`|`No`|`No`|`No`||`No`|Current release 8.6.3 not yet working with Tcl 9.|&
&|http://tdom.org/%|%tdom%|%|https://www.tcl3d.org/bawt/download/InputLibs/tdom-0.9.5.7z%|%0.9.5%|%|`Works`|`Yes`|`Yes`|`Yes`|[de]|`Yes`||&
&|https://github.com/mittelmark/thtmlview/%|%thtmlview%|%|https://www.tcl3d.org/bawt/download/InputLibs/thtmlview-2.0.0.7z%|%2.0.0%|%|`Works`|`Yes`|`Yes`|`Yes`||`Yes`|Formally known as shtmlview. Shtmlview is part of tklib.|&
&|https://tix.sourceforge.net/%|%Tix%|%|https://www.tcl3d.org/bawt/download/InputLibs/Tix-8.4.3.7z%|%8.4.3%|%|`NoTk9`|`No`|`No`|`No`||`No`||&&|https://chiselapp.com/user/bohagan/repository/TkCon/home%|%tkcon%|%|https://www.tchisel3dapp.com/userg/bohawtgan/drepownlsitoadry/ITkConp/utLibsv/tkcon-2.78.11tar.7gz%|%2.8%|%|`Works`|`Yes`|`Yes`|`N/A`|[BEO]|`No`||&
&|https://github.com/petasis/tkdnd%|%tkdnd%|%|https://www.tcl3d.org/bawt/download/InputLibs/tkdnd-2.9.4.7z%|%2.9.4%|%|`Works`|`Yes`|`Yes`|`Yes`|[petasis]|`Yes`||&
&|http://tkhtml.tcl.tk/index.html%|%Tkhtml%|%|https://www.tcl3d.org/bawt/download/InputLibs/Tkhtml-3.0.1.7z%|%3.0.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/Tkhtml-3.0.2.7z%|%3.0.2%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://core.tcl-lang.org/tklib%|%tklib%|%|https://www.tcl3d.org/bawt/download/InputLibs/tklib-0.9.7z%|%0.9%|%|`Works`|`Yes`|`Yes`|`N/A`|[aku]|`Yes`||&
&|https://chiselapp.com/user/rene/repository/tko/index%|%tko%|%|https://chiselapp.com/user/rene/repository/tko/index%|%0.4%|%|`Works`|`Yes`|`Yes`|`Yes`|[rz]|`Yes`|Replacement for rbc and tkpath.|&
&|https://www.androwish.org/home/dir?name=jni/tkpath%|%tkpath%|%|https://www.tcl3d.org/bawt/download/InputLibs/tkpath-0.4.0.7z%|%0.4.0%|%|`Works`|`Yes`|`Yes`|`Yes`||`No`|See package tko::path as replacement. Port supplied by Steve Shaw.|&
&|https://github.com/petasis/tkribbon%|%tkribbon%|%|https://www.tcl3d.org/bawt/download/InputLibs/tkribbon-1.1.7z%|%1.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/tkribbon-1.2.7z%|%1.2%|%|`Yes`|`Yes`|`N/A`||`No`||&
&|http://reddog.s35.xrea.com/wiki/TkSQLite.html%|%tksqlite%|%|https://www.tcl3d.org/bawt/download/InputLibs/tksqlite-0.5.13.7z%|%0.5.13%|%|https://www.tcl3d.org/bawt/download/InputLibs/tksqlite-0.5.14.7z%|%0.5.14%|%|`Yes`|`Yes`|`N/A`||`No`||&
&|https://github.com/oehhar/tksvg/%|%tksvg%|%|https://github.com/oehhar/tksvg/%|%0.14%|%|`Works`|`Yes`|`Yes`|`Yes`|[oehhar]|`Yes`|Not needed for Tk 8.7 and newer. SVG support built into Tk.|&&|https://github.com/bohagan1/TkTable/%|%Tktable%|%|https://www.tchisel3dapp.com/userg/bohawtgan/drepownlsitory/TkTadble/InputLibsv/Ttktable-2.12.7tar.gz%|%2.12%|%|`Works`|`Yes`|`Yes`|`Yes`|[BEO]|`Yes`||&
&|https://sourceforge.net/projects/tkwintrack/%|%tkwintrack%|%|https://www.tcl3d.org/bawt/download/InputLibs/tkwintrack-2.1.1.7z%|%2.1.1%|%|`Works`|`Yes`|`Yes`|`N/A`|[EL]|`Yes`||&
&|https://sourceforge.net/projects/tktreectrl/%|%treectrl%|%|https://www.tcl3d.org/bawt/download/InputLibs/treectrl-2.4.1.7z%|%2.4.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/treectrl-2.4.2.7z%|%2.4.2%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://tcltrf.sourceforge.net/%|%Trf%|%|https://www.tcl3d.org/bawt/download/InputLibs/Trf-2.1.4.7z%|%2.1.4%|%|`NoTcl9`|`No`|`No`|`No`||`No`||&
&|https://math.nist.gov/~DPorter/tcltk/trofs/%|%trofs%|%|https://www.tcl3d.org/bawt/download/InputLibs/trofs-0.4.9.7z%|%0.4.9%|%|`NoTcl9`|`No`|`No`|`No`||`No`||&
&|https://fossil.sowaswie.de/tserialport%|%tserialport%|%|https://www.tcl3d.org/bawt/download/InputLibs/tserialport-1.1.7z%|%1.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/tserialport-1.1.1.7z%|%1.1.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://github.com/apnadkarni/twapi%|%twapi%|%|https://www.tcl3d.org/bawt/download/InputLibs/twapi-5.0.2.7z%|%5.0.2%|%|`Works`|`Yes`|`Yes`|`Yes`|[APN]|`Yes`||&
&|https://fossil.sowaswie.de/tzint/%|%tzint%|%|https://www.tcl3d.org/bawt/download/InputLibs/tzint-1.1.7z%|%1.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/tzint-1.1.1.7z%|%1.1.1%|%|`Yes`|`Yes`|`Yes`||`No`||&
&|https://core.tcl-lang.org/tcludp/%|%udp%|%|https://www.tcl3d.org/bawt/download/InputLibs/udp-1.0.11.7z%|%1.0.11%|%|https://www.tcl3d.org/bawt/download/InputLibs/udp-1.0.12.7z%|%1.0.12%|%|`Yes`|`Yes`|`No`|[APN]|`Yes`|Tcl9 version available at https://core.tcl-lang.org/tcludp. Not tested yet.|&
&|https://github.com/auriocus/ukaz%|%ukaz%|%|https://www.tcl3d.org/bawt/download/InputLibs/ukaz-2.1.7z%|%2.1%|%|`Works`|`Yes`|`Yes`|`Yes`||`No`||&
&|https://github.com/auriocus/VecTcl/%|%vectcl%|%|https://www.tcl3d.org/bawt/download/InputLibs/vectcl-0.2.7z%|%0.2%|%|https://www.tcl3d.org/bawt/download/InputLibs/vectcl-0.2.1.7z%|%0.2.1%|%|`Yes`|`Yes`|`No`||`No`||&
&|http://www.nemethi.de/%|%wcb%|%|https://www.tcl3d.org/bawt/download/InputLibs/wcb-4.1.1.7z%|%4.1.1%|%|`Works`|`Yes`|`Yes`|`Yes`|[nemethi]|`Yes`|Also part of tklib.|&
&|https://sourceforge.net/projects/tkwintrack/%|%windetect%|%|https://www.tcl3d.org/bawt/download/InputLibs/windetect-2.0.1.7z%|%2.0.1%|%|`Works`|`Yes`|`Yes`|`N/A`|[EL]|`Yes`||&
&|https://www.androwish.org/index.html/dir?name=undroid/winhelp%|%winhelp%|%|https://www.tcl3d.org/bawt/download/InputLibs/winhelp-1.1.7z%|%1.1%|%|https://www.tcl3d.org/bawt/download/InputLibs/winhelp-1.1.1.7z%|%1.1.1%|%|`Yes`|`Yes`|`Yes`||||&

'''Additional comments:'''

----

**Changes in Tcl**


This table summarizes the changes done for porting Tcl programs.

Some of the actions are described first as code examples.

'''Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`'''

'''Replaced `package require Tk 8.X` with `package require Tk 8.X-`'''

An alternative to the above is as follows:

[AK] While going from 8.X to 8.X- opens the package to 9, it also opens it to 10, 11, etc.
A more restricted way would be to go to `package require Tcl 8.X 9`.
The two requirements, 8.X, and 9 are OR-ed. The command accepts the Tcl version,
if it matches at least one of the requirements.
With this change the package is opened to 9, but not beyond.


%| Common changes in Tcl files | Comments|%
&|Replaced `$tcl_platform` with `$::tcl_platform` in namespaces||&
&|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&|Replaced `package require Tk 8.X` with `package require Tk 8.X-`||&
&|Replaced `package vsatisfies Tcl 8.X` with `package vsatisfies Tcl 8.X-`||&
&|Added `string totitle` in pkgIndex.tcl.in or pkgIndex.tcl||&
&|Added `string totitle` in Makefile.in||&
&|Replaced `"~"` with `file tildeexpand "~"` for Tcl >= 9||&
&|Replaced obsolete `case` command with `switch`||&
&|Use `source -encoding utf-8` instead of plain `source`||&
&|Changed functionality: `ttk::combobox::current` returns empty string instead of -1||&
&|Check for octal numbers.||&

'''Additional comments:'''

----

**Changes in C**


This table summarizes the changes done for porting C/C++ extensions.

Some of the actions are described first as code examples.

'''Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined'''

======c
/* Check, if Tcl version supports Tcl_Size,
   which was introduced in Tcl 8.7 and 9.
*/
#ifndef TCL_SIZE_MAX
    #include <limits.h>
    #define TCL_SIZE_MAX INT_MAX

    #ifndef Tcl_Size
        typedef int Tcl_Size;
    #endif

    #define TCL_SIZE_MODIFIER ""
    #define Tcl_GetSizeIntFromObj Tcl_GetIntFromObj
#endif
======

'''Replaced `Tcl_SavedResult, Tcl_DiscardResult, Tcl_SaveResult, Tcl_RestoreResult` with Tcl9 functions'''

[DKF]: Note that Tcl_SaveResult() has basically been deprecated since Tcl 8.5 because it doesn't handle the full state
of the interpreter (and can't; not enough space in the Tcl_SavedResult structure definition and that's caller allocated;
by comparison, Tcl_InterpState is an opaque handle and has its definition entirely managed by Tcl's internals).
Unless you need the code to still work in Tcl 8.4 and before, you should update to use the new API.
Tcl 9 just removes that deprecated API. Tcl 8.5 and 8.6 were the transition period (over a decade).

======c
#if TCL_MAJOR_VERSION < 9
    Tcl_SavedResult savedResult;
#else
    Tcl_InterpState savedResult;
#endif

#if TCL_MAJOR_VERSION < 9
    Tcl_SaveResult(interp, &savedResult);
#else
    savedResult = Tcl_SaveInterpState(interp, TCL_OK);
#endif

#if TCL_MAJOR_VERSION < 9
    Tcl_RestoreResult(interp, &savedResult);
#else
    Tcl_RestoreInterpState(interp, savedResult);
#endif

#if TCL_MAJOR_VERSION < 9
    Tcl_DiscardResult(&state);
#else
    Tcl_DiscardInterpState(state);
#endif
======


%| Common changes in C/C++ files | Comments|%
&|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|Replaced `Tcl_PkgRequire(interp, "Tk", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tk", "8.X-", 0)`||&
&|Replaced `Tk_InitStubs(interp, "8.X")` with `Tk_InitStubs(interp, "8.X-")`||&
&|Added `#include <stdarg.h>`||&
&|Removed `_ANSI_ARGS_` statements||&
&|Added definition of `_ANSI_ARGS_`|Too lazy to replace them all|&
&|Added definition of `TCL_VARARGS`|Too lazy to replace them all|&
&|||&
&|Changed `CONST` to `const`||&
&|Changed `CONST84` to `const`||&
&|Changed `CONST86` to `const`||&
&|Changed `VOID` to `void`||&
&|||&
&|Replaced `TCL_CHANNEL_VERSION_2` with `TCL_CHANNEL_VERSION_5`||&
&|Replaced `TCL_CHANNEL_VERSION_4` with `TCL_CHANNEL_VERSION_5`||&
&|||&
&|Unicode related changes||&
&|Replaced `Tcl_UniCharNcasecmp` with `Tcl_UtfNcasecmp`||&
&|Replaced `Tcl_UniCharNcmp` with `Tcl_UtfNcmp`||&
&|Replaced `Tcl_UniCharCaseMatch` with `Tcl_StringCaseMatch`||&
&|Replaced `Tcl_Backslash` with `Tcl_UtfBackslash`||&
&|Replaced `Tcl_DStringTrunc` with `Tcl_DStringSetLength`||&
&|Replaced `TclOffset` with `offsetof`||&
&|Replaced `Tk_Offset` with `offsetof`||&
&|Replaced `Tcl_WinUtfToTChar` with `Tcl_UtfToChar16DString`||&
&|Replaced `Tk_BackgroundError` with `Tcl_BackgroundError`||&
&|Replaced `Tk_CancelIdleCall` with `Tcl_CancelIdleCall`||&
&|Replaced `Tk_DoWhenIdle` with `Tcl_DoWhenIdle`||&
&|Replaced `Tk_EventuallyFree` with `Tcl_EventuallyFree`||&
&|Replaced `Tk_Preserve` with `Tcl_Preserve`||&
&|Replaced `Tk_Release` with `Tcl_Release`||&
&|Replaced `Tk_InternalBorderWidth` with `Tk_InternalBorderLeft`||&
&|Replaced `TkpDrawHighlightBorder` with `Tk_DrawHighlightBorder` for Tk >= 9||&
&|Replaced `TkpMakeWindow` with `Tk_MakeWindow` for Tk >= 9||&
&|Replaced `TclSetPreInitScript` with `Tcl_SetPreInitScript` for Tcl >= 9||&
&|Added parameter `compRule` to `Tk_PhotoPutBlock` for Tk >= 9||&
&|Replaced `Tk_PhotoPutBlock_NoComposite` with `Tk_PhotoPutBlock(..., TK_PHOTO_COMPOSITE_OVERLAY)`||&
&|Replaced `Tcl_PanicVA` with ``Tcl_Panic` using method described in TIP 422||&
&|Replaced `panic` with `Tcl_Panic`||&
&|Replaced `Tcl_DriverCloseProc` with `Tcl_DriverClose2Proc`. Changed signature of corresponding function.||&
&|||&
&|Removed code using obsolete `Tk_FreeXId`||&
&|Removed expressions using obsolete `TCL_INTERP_DESTROYED`|[DGP]: Any code still making use of the TCL_INTERP_DESTROYED flag should be converted to call the Tcl_InterpDeleted routine.|&
&|Removed expressions using obsolete `TCL_PARSE_PART1`|[DGP]: The last Tcl release where the TCL_PARSE_PART1 flag had any effect was Tcl 8.0. Just remove it.|&
&|Removed expressions using obsolete `TK_CONFIG_OPTION_SPECIFIED`||&
&|Replaced obsolete `TCL_OUT_LINE_COMPILE` with `TCL_ERROR`||&
&|Replaced obsolete `TK_X_EVENTS` with `TCL_WINDOW_EVENTS`||&
&|Replaced obsolete `TK_DONT_WAIT` with `TCL_DONT_WAIT`||&
&|Replaced `Tcl_SavedResult, Tcl_DiscardResult, Tcl_SaveResult, Tcl_RestoreResult` with Tcl9 functions||&
&|||&
&|Updated `tclconfig` files||&
&|Updated files `config.guess` and `config.sub`||&
&|||&
&|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|Replaced `NULL` or `0` with `(Tcl_Size *)NULL` in functions having `Tcl_Size` as input parameter||&
&|Replaced `NULL` with `(char *)NULL` in calls of function `Tcl_AppendResult` or `Tcl_SetErrorCode`|[chrstphrchvz]: Note that casting the NULL sentinel is not for Tcl 9 readiness, but rather something that should be done anyway for portability.|&

'''Additional comments:'''

----

**CMake**

%| File | Changes | Comments|%
&|Modules/FindTCL.cmake|Added search for `tcl9tk87` library files in BAWT Build script `CMake.bawt`||&
&|Modules/FindTCL.cmake|Added search for `tcl9tk90` library files in BAWT Build script `CMake.bawt`||&

'''Additional comments:'''

----

**Canvas3d**

%| File | Changes | Comments|%
&|generic/c3dsearch.c|Removed `CONST86` in struct||&
&|generic/c3d.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|Several files|Replaced `Tk_Offset` with `offsetof`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**DiffUtil**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle`||&
&|generic/diffutil.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|generic/diffutil.c|Replaced `Tcl_UniCharNcasecmp` with `Tcl_UtfNcasecmp`||&
&|generic/diffutil.c|Replaced `Tcl_UniCharNcmp` with `Tcl_UtfNcmp`||&
&|generic/diffutil.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/diff.c|Unicode related changes||&
&|Several files|Changed `CONST` to `const`||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**ffidl**

%| File | Changes | Comments|%
&|generic/ffidl.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|generic/ffidl.c|Changed `CONST` to `const`||&
&|generic/ffidl.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/ffidl.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|library/ffidlrt.tcl|Replaced `$tcl_platform` with `$::tcl_platform` in namespaces||&
&|library/ffidlrt.tcl|Need to correct stubs number of obsolete `Tcl_GetUnicode` and `Tcl_GetByteArrayFromObj`|TODO|&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**fitsTcl**

%| File | Changes | Comments|%
&|configure.in|Added search for Tcl9 libraries.||&
&|fitsTcl.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `NULL` or `0` with `(Tcl_Size *)NULL` in functions having `Tcl_Size` as input parameter||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&

'''Additional comments:'''

----

**gorilla**

%| File | Changes | Comments|%
&|Several files|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&|sources/tcllib|Updated `csv` module to 0.8.1||&
&|sources/tcllib|Updated `md5` module to 2.0.8||&
&|sources/tcllib|Updated `sha1`module to 2.0.4||&
&|sources/tcllib|Updated `sha1`module to 1.0.7||&
&|gorilla.tcl|Replaced `"~"` with `file tildeexpand "~"` for Tcl >= 9||&

'''Additional comments:'''

----

**imgjp2**

%| File | Changes | Comments|%
&|Makefile.in|Added `string totitle`||&
&|imgjp2.c|Replaced `Tk_PhotoPutBlock_NoComposite` with `Tk_PhotoPutBlock(..., TK_PHOTO_COMPOSITE_OVERLAY)`||&
&|imgjp2.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|imgjp2.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**imgtools**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle`||&
&|generic/imgtoolsDecl.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**iwidgets**

%| File | Changes | Comments|%
&|win/iwidgets.tcl|Replaced `$iwidgets` with `$::iwidgets` in namespaces||&
&|iwidgets.tcl.in|Replaced `$iwidgets` with `$::iwidgets` in namespaces||&
&|iwidgets.tcl.in|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**memchan**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `CONST84` to `const`||&
&|Several files|Changed `VOID` to `void`||&
&|Several header files|Added definition of `_ANSI_ARGS_`||&
&|generic/memchanInt.h|Corrected `#if ((TCL_MAJOR_VERSION >= 8) && ...)` to `#if ((TCL_MAJOR_VERSION == 8) && ...)`||&
&|generic/memchanInt.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/memchan.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''
   * BAWT demo gives error: channel type memory/fifo must be version TCL_CHANNEL_VERSION_5

----

**Mpexpr**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `CONST84` to `const`||&
&|Several files|Changed `VOID` to `void`||&
&|Several files|Removed `_ANSI_ARGS_` statements||&
&|./generic/mpexpr.h|Added definition of `TCL_VARARGS`||&
&|./generic/mpparse.c|Replaced `Tcl_Backslash` with `Tcl_UtfBackslash`||&

'''Additional comments:'''

----

**nacl**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle`||&
&|generic/nacl.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/nacl.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**parse_args**

%| File | Changes | Comments|%
&|generic/parse_args.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|generic/parse_args.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|generic/parse_argsInt.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**pgintcl**

%| File | Changes | Comments|%
&|pgin.tcl|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&

'''Additional comments:'''

----

**photoresize**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle`||&
&|generic/photoresize_wrap.cpp|Changed `CONST` to `const`||&
&|generic/photoresize_wrap.cpp|Replaced `NULL` or `0` with `(Tcl_Size *)NULL` in functions having `Tcl_Size` as input parameter||&
&|generic/photoresize_wrap.cpp|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/photoresize_wrap.cpp|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**printer**

%| File | Changes | Comments|%
&|printer.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|printer.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|printer.c|Replaced `Tcl_SavedResult, Tcl_DiscardResult, Tcl_SaveResult, Tcl_RestoreResult` with Tcl9 functions||&

'''Additional comments:'''

----

**rl_json**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Removed `_ANSI_ARGS_` statements||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|generic/rl_json.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|pkgIndex.tcl.in|Added `string totitle`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''
   * BAWT demo gives error: Can't retrieve objType for int

----

**rbc**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `CONST86` to `const`||&
&|Several files|Added definition of `_ANSI_ARGS_`||&
&|Several files|Added definition of `TCL_VARARGS`||&
&|Several files|Removed expressions using obsolete `TCL_INTERP_DESTROYED`||&
&|Several files|Replaced `Tk_Offset` with `offsetof`||&
&|Several files|Added parameter `compRule` to `Tk_PhotoPutBlock` for Tk >= 9||&
&|generic/rbcConfig.c|Removed expressions using obsolete `TK_CONFIG_OPTION_SPECIFIED`||&
&|generic/rbcGrMisc.c|Removed code using obsolete `Tk_FreeXId`||&

'''Additional comments:'''
   * Stopped porting because of lots of other needed changes

----

**shellicon**

%| File | Changes | Comments|%
&|shellicon.c|Changed `CONST` to `const`||&
&|shellicon.c|Replaced `Tcl_AppendResult` with `Tcl_SetResult` for return of image name||&

'''Additional comments:'''

----

**Snack**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `CONST84` to `const`||&
&|Several files|Changed `CONST86` to `const`||&
&|Several files|Removed `_ANSI_ARGS_` statements||&
&|generic/jkSound.h|Added `#if TCL_MAJOR_VERSION >= 9` to hide obsolete `Tcl_SeekOld` and `Tcl_TellOld`||&
&|generic/snack.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|Several files|Removed expressions using obsolete `TCL_INTERP_DESTROYED`||&
&|Several files|Removed expressions using obsolete `TCL_PARSE_PART1`||&
&|Several files|Removed expressions using obsolete `TK_CONFIG_OPTION_SPECIFIED`||&
&|Several files|Replaced `Tk_Offset` with `offsetof`||&

'''Additional comments:'''

----

**tbcload**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `VOID` to `void`||&
&|cmpInt.h|Added definition of `_ANSI_ARGS_`||&
&|cmpRead.c|Replaced `TclOffset` with `offsetof`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''
   * Critical compiler warnings regarding `int *` vs. `size_t *` with ExceptionRange
   * `package require tbcload` generates error message: InitTypes: failed to find the int type

----

**tclcompiler**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `CONST84` to `const`||&
&|cmpInt.h|Added definition of `_ANSI_ARGS_`||&
&|cmpInt.h|Replaced `panic` with `Tcl_Panic`||&
&|cmpWrite.c|Replaced `TclOffset` with `offsetof`||&
&|cmpWrite.c|Replaced obsolete `TCL_OUT_LINE_COMPILE` with `TCL_ERROR`||&
&|cmpWrite.c|Replaced `NULL` or `0` with `(Tcl_Size *)NULL` in functions having `Tcl_Size` as input parameter||&
&|cmpWrite.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|cmpWrite.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&||Updated `tclconfig` files||&

'''Additional comments:'''
   * Critical compiler warnings regarding `int *` vs. `size_t *` with ForeachVarList

----

**tclgd**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|generic/tclgdtcl.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|generic/tclgd.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/tclgd.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**Tclkit**

%| File | Changes | Comments|%
&|kbskit/generic/kitInit.c|Replaced `TclSetPreInitScript` with `Tcl_SetPreInitScript` for Tcl >= 9||&
&|Several files|Changed `CONST` to `const`||&
&|Several files|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&|Several files|Replaced `package vsatisfies Tcl 8.X` with `package vsatisfies Tcl 8.X-`||&
&|kbskit/library/setupvfs.tcl|Added ability to specify different Tcl and Tk versions.||&
&|TclVfs/generic/vfs.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|Several files|Removed `_ANSI_ARGS_` statements||&
&|vqtcl/generic/vlerq.c|Replaced `Tcl_WinUtfToTChar` with `Tcl_UtfToChar16DString`||&
&|Several files|Replaced `Tcl_SavedResult, Tcl_DiscardResult, Tcl_SaveResult, Tcl_RestoreResult` with Tcl9 functions||&
&|Several files|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**tclparser**

%| File | Changes | Comments|%
&|tclParser.c|Changed `CONST` to `const`||&
&|tclParser.c|Removed `_ANSI_ARGS_` statements||&
&|tclParser.c|Used `Tcl_Size` for size parameter of `TclFindElement` for Tcl >= 9||&
&|tclParser.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|tclParser.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**tclpy**

%| File | Changes | Comments|%
&|generic/tclpy.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|generic/tclpy.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/tclpy.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|pkgIndex.tcl.in.cmake|Added `string totitle`||&

'''Additional comments:'''

----

**tcltls**

%| File | Changes | Comments|%
&|Several files|Removed `_ANSI_ARGS_` statements||&
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `CONST84` to `const`||&
&|Several files|Changed `VOID` to `void`||&
&|tlsIO.c|Replaced `TCL_CHANNEL_VERSION_2` with `TCL_CHANNEL_VERSION_5`||&
&|tls.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|tls.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|tls.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|tls.c|Replaced `NULL` or `0` with `(Tcl_Size *)NULL` in functions having `Tcl_Size` as input parameter||&
&|pkgIndex.tcl.in|Replaced `package vsatisfies Tcl 8.X` with `package vsatisfies Tcl 8.X-`||&
&||Updated files `config.guess` and `config.sub`||&

'''Additional comments:'''

----

**tclvfs**

%| File | Changes | Comments|%
&|generic/vfs.c|Removed `_ANSI_ARGS_` statements||&
&|generic/vfs.c|Changed `CONST` to `const`||&
&|generic/vfs.c|Changed `CONST86` to `const`||&
&|generic/vfs.c|Replaced `Tcl_SavedResult, Tcl_DiscardResult, Tcl_SaveResult, Tcl_RestoreResult` with Tcl9 functions||&
&|generic/vfs.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/vfs.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|generic/vfs.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|library/vfs.tcl.in|Replaced `package vsatisfies Tcl 8.X` with `package vsatisfies Tcl 8.X-`||&
&|Several files|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**tix**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `VOID` to `void`||&
&|generic/tix.h|Added definition of `_ANSI_ARGS_`||&
&|generic/tix.h|Added definition of `TCL_VARARGS`||&
&|generic/tix.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/tixInt.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/tixGrSort.c|Replaced `Tcl_DStringTrunc` with `Tcl_DStringSetLength`||&
&|Several files|Replaced `Tcl_SavedResult, Tcl_DiscardResult, Tcl_SaveResult, Tcl_RestoreResult` with Tcl9 functions||&
&|Several files|Replaced `Tk_Preserve` with `Tcl_Preserve`||&
&|Several files|Replaced `Tk_Release` with `Tcl_Release`||&
&|Several files|Replaced `Tk_CancelIdleCall` with `Tcl_CancelIdleCall`||&
&|Several files|Replaced `Tk_DoWhenIdle` with `Tcl_DoWhenIdle`||&
&|Several files|Replaced `Tk_EventuallyFree` with `Tcl_EventuallyFree`||&
&|Several files|Replaced `Tk_BackgroundError` with `Tcl_BackgroundError`||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|Several files|Replaced `Tk_Offset` with `offsetof`||&
&|generic/tixWidget.c|Replaced obsolete `TK_X_EVENTS` with `TCL_WINDOW_EVENTS`||&
&|generic/tixWidget.c|Replaced obsolete `TK_DONT_WAIT` with `TCL_DONT_WAIT`||&
&|generic/tixForm.c|Replaced `Tk_InternalBorderWidth` with `Tk_InternalBorderLeft`||&
&|library/Init.tcl|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&|Makefile.in|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''
   * TODO: Replace obsolete `case` command with `switch`

----

**tkhtml**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `VOID` to `void`||&
&|Several files|Removed `_ANSI_ARGS_` statements||&
&|src/htmltcl.c|Added `#include <stdarg.h>`||&
&|src/htmltcl.c|Replaced `Tcl_PkgRequire(interp, "Tcl", "8.X", 0)` with `Tcl_PkgRequire(interp, "Tcl", "8.X-", 0)`||&
&|src/htmlimage.c|Added parameter `compRule` to `Tk_PhotoPutBlock` for Tk >= 9||&
&|src/html.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|hv/hv3see.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|Several files|Replaced `Tk_Offset` with `offsetof`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**tkribbon**

%| File | Changes | Comments|%
&|CMakeLists.txt|Replaced `tkribbon` with `Tkribbon` in `load` command||&
&|generic/TkRibbon_Widget.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|win/TkRibbon.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|Several files|Replaced `Tk_Offset` with `offsetof`||&

'''Additional comments:'''

----

**tksqlite**

%| File | Changes | Comments|%
&|tksqlite.tcl|Replaced `package require Tcl 8.X` with `package require Tcl 8.X-`||&
&|tksqlite.tcl|Replaced `ttk` with `::ttk` in namespaces||&
&|tksqlite.tcl|Replaced `"~"` with `file tildeexpand "~"` for Tcl >= 9||&

'''Additional comments:'''

----

**treectrl**

%| File | Changes | Comments|%
&|Several files|Changed `CONST` to `const`||&
&|Several files|Changed `VOID` to `void`||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&|Several files|Replaced `Tk_Offset` with `offsetof`||&
&|generic/tkTreeUtils.c|Removed `_ANSI_ARGS_` statements||&
&|generic/tkTreeCtrl.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/qebind.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/qebind.c|Replaced `Tcl_SavedResult, Tcl_DiscardResult, Tcl_SaveResult, Tcl_RestoreResult` with Tcl9 functions||&
&|generic/tkTreeDisplay.c|Replaced `TkpDrawHighlightBorder` with `Tk_DrawHighlightBorder` for Tk >= 9||&
&|generic/tkTreeElem.c|Removed expressions using obsolete `TCL_INTERP_DESTROYED`||&
&|Makefile.in|Added `string totitle` ||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**tserialport**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle` ||&
&||Updated files `config.guess` and `config.sub`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**tzint**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle`||&
&|generic/tzint.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/tzint.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

**udp**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle`||&
&|generic/udp_tcl.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/udp_tcl.c|Changed `CONST` to `const`||&
&|generic/udp_tcl.c|Changed `CONST86` to `const`||&
&|generic/udp_tcl.c|Replaced `Tcl_DriverCloseProc` with `Tcl_DriverClose2Proc`. Changed signature of corresponding function.||&
&|generic/udp_tcl.c|Added `#include <stdarg.h>`||&
&|generic/udp_tcl.c|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''
   * BAWT demo gives error:  channel type udp must be version TCL_CHANNEL_VERSION_5

----

**vectcl**

%| File | Changes | Comments|%
&|pkgIndex.tcl.in|Added `string totitle`||&
&|generic/vmparser.c|Changed `CONST` to `const`||&
&|generic/vmparser.c|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|generic/vectclInt.h|Added `Tcl_Size` related definitions, if `TCL_SIZE_MAX` is not defined||&
&|Several files|Replaced `ìnt` with `Tcl_Size` in functions having `Tcl_Size` as output parameter||&
&||Updated `tclconfig` files||&

'''Additional comments:'''
   * BAWT demo gives error: expected integer but got "1.0 0.0 0.0"

----

**winhelp**

%| File | Changes | Comments|%
&|Makefile.in|Added `string totitle`||&
&||Updated `tclconfig` files||&

'''Additional comments:'''

----

<<categories>> Tcl 9