\documentclass[]{article}
\usepackage{amsmath,graphicx,supertabular,hyperref,tabularx,ifthen}
\title{TIP \#23: Tk Toolkit Functional Areas for Maintainer Assignments}
\date{January 22, 2001}
\author{Kevin Kenny, Jim Ingham, Don Porter, Daniel A. Steffen, Donal K. Fellows}
\urlstyle{sf}
\setlength{\parskip}{1ex}
\setlength{\parindent}{0pt}
\def\tipversion$#1${\texttt{\$#1\$}}
\def\tiplangle#1{\ensuremath{<}}
\def\tiprangle#1{\ensuremath{>}}
\def\tipbar#1{\ensuremath{|}}
\def\tipmail#1#2{\(\langle\){\small\expandafter\url{#1@#2}}\(\rangle\)}
\ifx\pdfoutput\undefined
\newcommand{\tipimage}[2]{\typeout{Make sure you download #1.eps}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.eps}}{\includegraphics[width=0.8\textwidth]{#1.eps}}}
\newcommand{\tipxref}[1]{}
\newcommand{\tipxrefend}{}
\else
\newcommand{\tipimage}[2]{\typeout{Make sure you create #1.pdf}\ifthenelse{\lengthtest{0.8\textwidth>#2}\and\lengthtest{0pt<#2}}{\includegraphics{#1.pdf}}{\includegraphics[width=0.8\textwidth]{#1.pdf}}}
\pdfcatalog{/PageMode /UseOutlines}
\newcommand{\tipxref}[1]{\pdfannotlink attr {/C [0.5 0.5 1.0] /Border [0 0 1]} goto name {#1}}
\newcommand{\tipxrefend}{\pdfendlink}
\fi
\newenvironment{tipabstract}{\begin{abstract}}{\end{abstract}}
\begin{document}\maketitle
\begin{center}\begin{tabularx}{\linewidth}{|r@{: }X|}\hline
\textbf{TIP \#23}&\textbf{Tk Toolkit Functional Areas for Maintainer Assignments}\\\hline
Author&

Kevin Kenny \tipmail{kennykb}{acm.org}
\par
Jim Ingham \tipmail{jingham}{apple.com}
\par
Don Porter \tipmail{dgp}{users.sourceforge.net}
\par
Daniel A. Steffen \tipmail{das}{users.sourceforge.net}
\par
Donal K. Fellows \tipmail{donal.k.fellows}{manchester.ac.uk}
\\
Created&Monday, \(\text{22}^{\text{nd}}\) January 2001\\
Type&Process\\
State&Accepted\\
Vote&Done\\
Version&\tipversion$Revision: 1.30 $\\
Post History&\\
\hline\end{tabularx}\end{center}
\thispagestyle{empty}\pagestyle{empty}
\begin{tipabstract}

This document proposes a division of the Tk toolkit's source code into functional areas so that each area may be assigned to one or more maintainers.
\end{tipabstract}
\tableofcontents\setcounter{page}{0}\clearpage\pagestyle{plain}

\section{Background}

TCT procedures (see \cite{tip0}) call for each \textit{maintainer} to be responsible for a portion of the Tk toolkit's source code. Certain portions of the Tk toolkit's source code are naturally associated with certain other portions. (For example, the implementation of a command is intimately related to the documentation for that command.) Establishing a \textit{natural} division of the Tk toolkit's source code into units needing maintainers is a useful preliminary effort toward a public call for volunteer maintainers.

See \cite{tip30} for the mapping of these functional areas to maintainers.

\section{Rationale}

\cite{tip16} provides a convincing rationale for establishing a simple mapping from source files to maintainers. It also breaks out maintainers' functional areas for the Tcl core. This document attempts to develop a similar mapping for the Tk toolkit.

Just as with \cite{tip16}, this document attempts to divide the Tk toolkit into a set of the smallest sensible functional units.

One other factor, which was not addressed in \cite{tip16}, is that there is considerably more platform dependent code in Tk than in Tcl, and it is unreasonable to expect people to take ownership for pieces of code that run on platforms they don't have access to. However, we want to make sure that the maintainer structure supports the cross-platform nature of Tk.

To that end, in any area where there is both generic code, and platform specific code, we propose that maintainers can sign up for the generic code \textit{and} code for one or more platforms. By overlapping the generic code, we ensure that the public interfaces to Tk will stay consistent among the platforms, while not forcing maintainers to presume expertise in code they can't even compile, much less test or understand fully.

\section{Functional Areas}

The Tk toolkit shall be divided into the following functional units, each to be assigned one or more maintainers. Each area will also be a Category in the SourceForge Tracker for Tk:

\subsection{Widgets}
\begin{enumerate}
\item{}
\textbf{Bindings} --- library/tk.tcl
\setcounter{enumi}{1}
\item{}
\textbf{Appearance} --- generic/default.h, macosx/tkMacOSXDefault.h, unix/tkUnixDefault.h, win/tkWinDefault.h
\setcounter{enumi}{2}
\item{}
\textbf{[*button] and [label]} --- doc/button.n, doc/checkbutton.n, doc/label.n, doc/radiobutton.n, generic/tkButton.c, generic/tkButton.h, library/button.tcl, macosx/tkMacOSXButton.c, unix/tkUnixButton.c, tests/butGeom.tcl, tests/butGeom2.tcl, tests/button.test, tests/unixButton.test, tests/winButton.test, win/rc/buttons.bmp, win/tkWinButton.c
\setcounter{enumi}{3}
\item{}
\textbf{Canvas Basics} --- doc/CanvPsY.3, doc/CanvTxtInfo.3, doc/CanvTkwin.3, doc/CrtItemType.3, doc/GetDash.3, doc/canvas.n, generic/tkCanvUtil.c, generic/tkCanvas.c, generic/tkCanvas.h, tests/canvas.test
\setcounter{enumi}{4}
\item{}
\textbf{Canvas Items} --- generic/tkCanvArc.c, generic/tkCanvBmap.c, generic/tkCanvImg.c, generic/tkCanvLine.c, generic/tkCanvPoly.c, generic/tkCanvText.c, generic/tkCanvWind.c, generic/tkRectOval.c, tests/arc.tcl, tests/canvImg.test, tests/canvRect.test, tests/canvText.test, tests/canvWind.test
\setcounter{enumi}{5}
\item{}
\textbf{Canvas PostScript} --- generic/prolog.ps, generic/tkCanvPs.c, library/prolog.ps, tests/canvPs.test, tests/canvPsArc.tcl, tests/canvPsBmap.tcl, tests/canvPsGrph.tcl, tests/canvPsImg.tcl, tests/canvPsText.tcl
\setcounter{enumi}{6}
\item{}
\textbf{[entry]} --- doc/entry.n, generic/tkEntry.c, library/entry.tcl, tests/entry.test
\setcounter{enumi}{7}
\item{}
\textbf{[frame], [toplevel] and [labelframe]} (see \cite{tip18}) --- doc/frame.n, doc/labelframe.n, doc/toplevel.n, generic/tkFrame.c, tests/frame.test
\setcounter{enumi}{8}
\item{}
\textbf{[listbox]} --- doc/listbox.n, generic/tkListbox.c, library/listbox.tcl, tests/listbox.test
\setcounter{enumi}{9}
\item{}
\textbf{Generic Menus} --- doc/menu.n, doc/menubutton.n, doc/popup.n, generic/tkMacWinMenu.c, generic/tkMenu.c, generic/tkMenu.h, generic/tkMenuDraw.c, generic/tkMenubutton.c, generic/tkMenubutton.h, library/menu.tcl, library/tearoff.tcl, tests/menu.test, tests/menuDraw.test, tests/menubut.test
\setcounter{enumi}{10}
\item{}
\textbf{Aqua Menus} --- macosx/tkMacOSXMenu.c, macosx/tkMacOSXMenu.r, macosx/tkMacOSXMenubutton.c, macosx/tkMacOSXMenus.c
\setcounter{enumi}{11}
\item{}
\textbf{Unix Menus} --- tests/unixMenu.test, unix/tkUnixMenu.c, unix/tkUnixMenubu.c
\setcounter{enumi}{12}
\item{}
\textbf{Win Menus} --- tests/winMenu.test, win/tkWinMenu.c
\setcounter{enumi}{13}
\item{}
\textbf{[message]} --- doc/message.n, generic/tkMessage.c, tests/message.test
\setcounter{enumi}{14}
\item{}
\textbf{[scale]} --- doc/scale.n, generic/tkScale.c, generic/tkScale.h, library/scale.tcl, macosx/tkMacOSXScale.c, tests/scale.test, unix/tkUnixScale.c
\setcounter{enumi}{15}
\item{}
\textbf{[scrollbar]} --- doc/scrollbar.n, generic/tkScrollbar.c, generic/tkScrollbar.h, library/scrlbar.tcl, macosx/tkMacOSXScrlbr.c, tests/scrollbar.test, unix/tkUnixScrlbr.c, win/tkWinScrlbr.c
\setcounter{enumi}{16}
\item{}
\textbf{[spinbox]} --- doc/spinbox.n, library/spinbox.tcl, tests/spinbox.test
\setcounter{enumi}{17}
\item{}
\textbf{[text]} --- doc/text.n, generic/tkText.c, generic/tkText.h, generic/tkTextBTree.c, generic/tkTextDisp.c, generic/tkTextImage.c, generic/tkTextIndex.c, generic/tkTextMark.c, generic/tkTextTag.c, generic/tkTextWind.c, generic/tkUndo.c, generic/tkUndo.h, library/text.tcl, tests/text.test, tests/textBTree.test, tests/textDisp.test, tests/textImage.test, tests/textIndex.test, tests/textMark.test, tests/textTag.test, tests/textWind.test
\setcounter{enumi}{18}
\item{}
\textbf{Menubars (obsolete)} --- doc/menubar.n, library/obsolete.tcl
\setcounter{enumi}{19}
\item{}
\textbf{[tk\_optionMenu]} --- doc/optionMenu.n, library/optMenu.tcl
\setcounter{enumi}{20}
\item{}
\textbf{[panedwindow]} (see \cite{tip41}) --- doc/panedwindow.n, generic/tkPanedWindow.c, library/panedwindow.tcl, tests/panedwindow.test
\setcounter{enumi}{21}
\item{}
\textbf{Style Engine} (see \cite{tip48}) --- generic/tkStyle.c
\end{enumerate}

\subsection{Widget Options}
\begin{enumerate}
\setcounter{enumi}{22}
\item{}
\textbf{Option Parsing} --- doc/ConfigWidg.3, doc/SetOptions.3, generic/tkConfig.c, generic/tkOldConfig.c, macosx/tkMacOSXConfig.c, unix/tkUnixConfig.c, tests/config.test, win/tkWinConfig.c
\setcounter{enumi}{23}
\item{}
\textbf{Relief} --- doc/3DBorder.3, doc/GetRelief.3, generic/tk3d.c, generic/tk3d.h, unix/tkUnix3d.c, tests/bevel.tcl, tests/border.test, win/tkWin3d.c
\setcounter{enumi}{24}
\item{}
\textbf{Built-in Bitmaps} --- bitmaps/error.bmp, bitmaps/gray12.bmp, bitmaps/gray25.bmp, bitmaps/gray50.bmp, bitmaps/gray75.bmp, bitmaps/hourglass.bmp, bitmaps/info.bmp, bitmaps/questhead.bmp, bitmaps/question.bmp, bitmaps/warning.bmp, doc/GetBitmap.3, generic/tkBitmap.c, macosx/tkMacOSXBitmap.c, tests/bitmap.test
\setcounter{enumi}{25}
\item{}
\textbf{Conversions From String} --- doc/GetAnchor.3, doc/GetCapStyl.3, doc/GetJoinStl.3, doc/GetJustify.3, doc/GetPixels.3, doc/GetUid.3, generic/tkGet.c, tests/get.test
\setcounter{enumi}{26}
\item{}
\textbf{Objects} --- generic/tkObj.c, tests/obj.test
\setcounter{enumi}{27}
\item{}
\textbf{Utility Functions} --- doc/DrawFocHlt.3, doc/GetScroll.3, generic/tkUtil.c, tests/util.test
\setcounter{enumi}{28}
\item{}
\textbf{Colormaps and Visuals} --- doc/GetClrmap.3, doc/GetVisual.3, generic/tkVisual.c, tests/visual.test
\setcounter{enumi}{29}
\item{}
\textbf{Color Names} --- doc/GetColor.3, doc/colors.n, generic/tkColor.c, generic/tkColor.h, macosx/tkMacOSXColor.c, unix/tkUnixColor.c, tests/cmap.tcl, tests/color.test, win/tkWinColor.c, xlib/xcolors.c
\setcounter{enumi}{30}
\item{}
\textbf{Cursor Names} --- doc/GetCursor.3, doc/cursors.n, generic/tkCursor.c, macosx/tkMacOSXCursor.c, macosx/tkMacOSXCursors.r, macosx/tkMacOSXXCursors.r, unix/tkUnixCursor.c, tests/cursor.test, win/rc/cursor*.cur, win/tkWinCursor.c, xlib/X11/cursorfont.h
\setcounter{enumi}{31}
\item{}
\textbf{Key Symbols} --- doc/keysyms.n, macosx/tkMacOSXKeyboard.c, unix/tkUnixKey.c, win/tkWinKey.c, xlib/X11/keysym.h, xlib/X11/keysymdef.h
\end{enumerate}

\subsection{Standard Dialogs}
\begin{enumerate}
\setcounter{enumi}{32}
\item{}
\textbf{Generic Dialog Support} --- library/comdlg.tcl
\setcounter{enumi}{33}
\item{}
\textbf{[tk\_chooseColor]} --- doc/chooseColor.n, library/clrpick.tcl, tests/clrpick.test
\setcounter{enumi}{34}
\item{}
\textbf{[tk\_dialog]} --- doc/dialog.n, library/dialog.tcl, macosx/tkMacOSXDialog.c, tests/dialog.test, tests/winDialog.test, unix/tkUnixDialog.c, win/tkWinDialog.c
\setcounter{enumi}{35}
\item{}
\textbf{[tk\_chooseDirectory]} --- doc/chooseDirectory.n, library/choosedir.tcl, tests/choosedir.test
\setcounter{enumi}{36}
\item{}
\textbf{[tk\_get*File]} --- doc/getOpenFile.n, generic/tkFileFilter.c, generic/tkFileFilter.h, library/tkfbox.tcl, library/xmfbox.tcl, tests/filebox.test, tests/xmfbox.test
\setcounter{enumi}{37}
\item{}
\textbf{[tk\_messageBox]} --- doc/messageBox.n, library/msgbox.tcl, tests/msgbox.test
\end{enumerate}

\subsection{Images}
\begin{enumerate}
\setcounter{enumi}{38}
\item{}
\textbf{Image Basics} --- doc/CrtImgType.3, doc/DeleteImg.3, doc/GetImage.3, doc/ImgChanged.3, doc/NameOfImg.3, doc/image.n, generic/tkImage.c, generic/tkImgUtil.c, generic/tkStubImg.c, tests/image.test
\setcounter{enumi}{39}
\item{}
\textbf{Bitmap Images} --- doc/bitmap.n, generic/tkImgBmap.c, tests/imgBmap.test
\setcounter{enumi}{40}
\item{}
\textbf{Photo Images} --- doc/CrtPhImgFmt.3, doc/FindPhoto.3, doc/photo.n, generic/tkImgPhoto.c, tests/imgPhoto.test
\setcounter{enumi}{41}
\item{}
\textbf{Photo Image\tipbar{}GIF} --- generic/tkImgGIF.c
\setcounter{enumi}{42}
\item{}
\textbf{Photo Image\tipbar{}PPM} --- generic/tkImgPPM.c, tests/imgPPM.test
\end{enumerate}

\subsection{Fonts}
\begin{enumerate}
\setcounter{enumi}{43}
\item{}
\textbf{Generic Fonts} --- doc/FontId.3, doc/GetFont.3, doc/MeasureChar.3, doc/TextLayout.3, doc/font.n, generic/tkFont.c, generic/tkFont.h, tests/font.test
\setcounter{enumi}{44}
\item{}
\textbf{Aqua Fonts} --- macosx/tkMacOSXFont.c
\setcounter{enumi}{45}
\item{}
\textbf{Unix Fonts} --- tests/unixFont.test, unix/tkUnixFont.c, unix/tkUnixRFont.c
\setcounter{enumi}{46}
\item{}
\textbf{Win Fonts} --- tests/winFont.test, win/tkWinFont.c
\end{enumerate}

\subsection{Geometry management}
\begin{enumerate}
\setcounter{enumi}{47}
\item{}
\textbf{Geometry Management} --- doc/GeomReq.3, doc/MaintGeom.3, doc/ManageGeom.3, generic/tkGeometry.c, tests/geometry.test
\setcounter{enumi}{48}
\item{}
\textbf{[grid]} --- doc/grid.n, generic/tkGrid.c, tests/grid.test
\setcounter{enumi}{49}
\item{}
\textbf{[pack]} --- doc/pack-old.n, doc/pack.n, generic/tkPack.c, tests/oldpack.test, tests/pack.test
\setcounter{enumi}{50}
\item{}
\textbf{[place]} --- doc/place.n, generic/tkPlace.c, tests/place.test
\end{enumerate}

\subsection{Selection and Clipboard}
\begin{enumerate}
\setcounter{enumi}{51}
\item{}
\textbf{[clipboard]} --- doc/Clipboard.3, doc/clipboard.n, generic/tkClipboard.c, macosx/tkMacOSXClipboard.c, tests/clipboard.test, tests/unixSelect.test, tests/winClipboard.test, unix/tkUnixSelect.c, win/tkWinClipboard.c
\setcounter{enumi}{52}
\item{}
\textbf{[selection]} --- doc/ClrSelect.3, doc/CrtSelHdlr.3, doc/GetSelect.3, doc/OwnSelect.3, doc/selection.n, generic/tkSelect.c, generic/tkSelect.h, tests/select.test
\end{enumerate}

\subsection{Other Tk commands}
\begin{enumerate}
\setcounter{enumi}{53}
\item{}
\textbf{[console]} --- doc/console.n, generic/tkConsole.c, library/console.tcl
\setcounter{enumi}{54}
\item{}
\textbf{[focus]} --- doc/focus.n, generic/tkFocus.c, tests/focus.test
\setcounter{enumi}{55}
\item{}
\textbf{[grab] and [tk busy]} --- doc/Grab.3, doc/busy.n doc/grab.n, generic/tkBusy.c, generic/tkBusy.h, generic/tkGrab.c, tests/busy.test, tests/grab.test
\setcounter{enumi}{56}
\item{}
\textbf{[option]} --- doc/AddOption.3, doc/GetOption.3, doc/option.n, generic/tkOption.c, tests/option.file1, tests/option.file2, tests/option.test
\setcounter{enumi}{57}
\item{}
\textbf{[send]} --- doc/SetAppName.3, doc/send.n, macosx/tkMacOSXSend.c, tests/send.test, tests/unixSend.test, tests/winSend.test, unix/tkUnixSend.c, win/tkWinSend.c
\setcounter{enumi}{58}
\item{}
\textbf{[tk\_focus*]} --- doc/focusNext.n, library/focus.tcl, tests/focusTcl.test
\setcounter{enumi}{59}
\item{}
\textbf{[tk\_setPalette]} --- doc/palette.n, library/palette.tcl
\setcounter{enumi}{60}
\item{}
\textbf{Safe Tk} --- doc/loadTk.n, library/safetk.tcl, tests/safe.test
\end{enumerate}

\subsection{Low-level Tk functions}
\begin{enumerate}
\setcounter{enumi}{61}
\item{}
\textbf{Geometry Functions} --- generic/tkTrig.c
\setcounter{enumi}{62}
\item{}
\textbf{Tk\_Win Functions} --- doc/ConfigWind.3, doc/CrtWindow.3, doc/IdToWindow.3, doc/MainWin.3, doc/MapWindow.3, doc/Name.3, doc/Restack.3, doc/SetClass.3, doc/SetClassProcs.3, doc/SetVisual.3, doc/StrictMotif.3, doc/Tk\_Init.3, doc/WindowId.3, generic/tkWindow.c, tests/window.test
\setcounter{enumi}{63}
\item{}
\textbf{Graphic Contexts} --- doc/GetGC.3, generic/tkGC.c
\setcounter{enumi}{64}
\item{}
\textbf{Generic Window Operations} --- doc/CoordToWin.3, doc/FreeXId.3, doc/GetHINSTANCE.3, doc/GetHWND.3, doc/GetPixmap.3, doc/GetRootCrd.3, doc/GetVRoot.3, doc/HWNDToWindow.3, doc/MoveToplev.3, doc/SetCaret.3, doc/SetGrid.3, doc/bell.n, doc/bind.n, doc/bindtags.n, doc/destroy.n, doc/lower.n, doc/raise.n, doc/tk.n, doc/tkwait.n, doc/winfo.n, doc/wm.n, generic/tkCmds.c, generic/tkPointer.c, tests/bell.test, tests/cmds.test, tests/embed.test, tests/id.test, tests/raise.test, tests/tk.test, tests/winfo.test, tests/wm.test, xlib/xgc.c
\setcounter{enumi}{65}
\item{}
\textbf{Aqua Window Operations} --- macosx/tkMacOSXCarbonEvents.c macosx/tkMacOSXDebug.c macosx/tkMacOSXDebug.h macosx/tkMacOSXDraw.c, macosx/tkMacOSXEmbed.c, macosx/tkMacOSXEvent.c macosx/tkMacOSXEvent.h macosx/tkMacOSXHLEvents.c, macosx/tkMacOSXKeyEvent.c macosx/tkMacOSXMouseEvent.c macosx/tkMacOSXNotify.c macosx/tkMacOSXRegion.c, macosx/tkMacOSXSubwindows.c, macosx/tkMacOSXWindowEvent.c macosx/tkMacOSXWm.c, macosx/tkMacOSXWm.h, macosx/tkMacOSXXStubs.c
\setcounter{enumi}{66}
\item{}
\textbf{Unix Window Operations} --- tests/unixEmbed.test, tests/unixWm.test, unix/tkUnix.c, unix/tkUnixDraw.c, unix/tkUnixEmbed.c, unix/tkUnixEvent.c, unix/tkUnixFocus.c, unix/tkUnixWm.c, unix/tkUnixXId.c
\setcounter{enumi}{67}
\item{}
\textbf{Win Window Operations} --- tests/winWm.test, win/stubs.c, win/tkWinDraw.c, win/tkWinEmbed.c, win/tkWinImage.c, win/tkWinPixmap.c, win/tkWinPointer.c, win/tkWinRegion.c, win/tkWinWindow.c, win/tkWinWm.c, win/tkWinX.c
\setcounter{enumi}{68}
\item{}
\textbf{Events} --- doc/BindTable.3, doc/event.n, generic/tkBind.c, tests/bind.test
\setcounter{enumi}{69}
\item{}
\textbf{Event Loop} --- doc/CrtCmHdlr.3, doc/CrtGenHdlr.3, doc/EventHndlr.3, doc/HandleEvent.3, doc/MainLoop.3, doc/QWinEvent.3, doc/RestrictEv.3, generic/tkEvent.c, tests/event.test
\setcounter{enumi}{70}
\item{}
\textbf{Error Handling} --- doc/CrtErrHdlr.3, doc/tkerror.n, generic/tkError.c, library/bgerror.tcl, tests/bgerror.test
\setcounter{enumi}{71}
\item{}
\textbf{Atoms} --- doc/InternAtom.3, generic/tkAtom.c, xlib/X11/Xatom.h
\end{enumerate}

\subsection{Shells}
\begin{enumerate}
\setcounter{enumi}{72}
\item{}
\textbf{Argv Parsing} --- doc/ParseArgv.3, generic/tkArgv.c
\setcounter{enumi}{73}
\item{}
\textbf{Application Embedding} --- doc/Tk\_Main.3, generic/tkInitScript.h, generic/tkMain.c, macosx/tkMacOSXInit.c, unix/tkUnixInit.c, win/tkWin32Dll.c, win/tkWinInit.c, tests/main.test
\setcounter{enumi}{74}
\item{}
\textbf{wish} --- doc/wish.1, macosx/tkMacOSXAppInit.c, unix/tkAppInit.c, win/winMain.c
\end{enumerate}

\subsection{Demonstrations}
\begin{enumerate}
\setcounter{enumi}{75}
\item{}
\textbf{Widget Tour} --- library/demos/arrow.tcl, library/demos/bind.tcl, library/demos/bitmap.tcl, library/demos/button.tcl, library/demos/check.tcl, library/demos/clrpick.tcl, library/demos/colors.tcl, library/demos/cscroll.tcl, library/demos/ctext.tcl, library/demos/dialog1.tcl, library/demos/dialog2.tcl, library/demos/entry1.tcl, library/demos/entry2.tcl, library/demos/entry3.tcl, library/demos/filebox.tcl, library/demos/floor.tcl, library/demos/form.tcl, library/demos/hscale.tcl, library/demos/icon.tcl, library/demos/image1.tcl, library/demos/image2.tcl, library/demos/items.tcl, library/demos/label.tcl, library/demos/labelframe.tcl, library/demos/menu.tcl, library/demos/menubu.tcl, library/demos/msgbox.tcl, library/demos/paned1.tcl, library/demos/paned2.tcl, library/demos/plot.tcl, library/demos/puzzle.tcl, library/demos/radio.tcl, library/demos/ruler.tcl, library/demos/sayings.tcl, library/demos/search.tcl, library/demos/spin.tcl, library/demos/states.tcl, library/demos/style.tcl, library/demos/text.tcl, library/demos/twind.tcl, library/demos/vscale.tcl, library/demos/widget, library/demos/images/earth.gif, library/demos/images/earthris.gif, library/demos/images/face.bmp, library/demos/images/flagdown.bmp, library/demos/images/flagup.bmp, library/demos/images/gray25.bmp, library/demos/images/letters.bmp, library/demos/images/noletter.bmp, library/demos/images/pattern.bmp, library/demos/images/tcllogo.gif, library/demos/images/teapot.ppm
\setcounter{enumi}{76}
\item{}
\textbf{Square Demo} --- generic/tkSquare.c, library/demos/square
\setcounter{enumi}{77}
\item{}
\textbf{Other Demos} --- library/demos/browse, library/demos/hello, library/demos/ixset, library/demos/rmt, library/demos/rolodex, library/demos/tcolor, library/demos/timer
\end{enumerate}

\subsection{Localization}
\begin{enumerate}
\setcounter{enumi}{78}
\item{}
\textbf{L10N} --- library/msgs/cs.msg, library/msgs/de.msg, library/msgs/el.msg, library/msgs/en.msg, library/msgs/en\_gb.msg, library/msgs/es.msg, library/msgs/fr.msg, library/msgs/it.msg, library/msgs/nl.msg, library/msgs/ru.msg
\end{enumerate}

\subsection{Release Engineering}
\begin{enumerate}
\setcounter{enumi}{79}
\item{}
\textbf{Release Notes} --- README, */README, */*/README, changes, license.terms, doc/options.n, doc/tk4.0.ps, tests/bugs.tcl
\setcounter{enumi}{80}
\item{}
\textbf{Portability} --- compat/limits.h, compat/stdlib.h, compat/unistd.h
\setcounter{enumi}{81}
\item{}
\textbf{X11 Emulation} --- xlib/X11/X.h, xlib/X11/Xfuncproto.h, xlib/X11/Xlib.h, xlib/X11/Xutil.h, xlib/xbytes.h, xlib/xdraw.c, xlib/ximage.c, xlib/xutil.c
\setcounter{enumi}{82}
\item{}
\textbf{Mac OS X Build} --- macosx/Makefile, macosx/buildTkConfig.tcl, macosx/tkAboutDlg.r, macosx/tkMacOSX.h, macosx/tkMacOSXAETE.r, macosx/Wish.pbproj/project.pbxproj
\setcounter{enumi}{83}
\item{}
\textbf{Unix Build} --- unix/Makefile.in, unix/aclocal.m4, unix/configure.in, unix/install-sh, unix/tcl.m4, unix/tk.spec, unix/tkConfig.sh.in
\setcounter{enumi}{84}
\item{}
\textbf{Win Build} --- win/Makefile.in, win/aclocal.m4, win/buildall.vc.bat, win/configure.in, win/makefile.vc, win/mkd.bat, win/nmakehlp.c, win/rc/tkc, win/rc/tk\_base.rc, win/rc/wish.exe.manifest, win/rc/wish.rc, win/rmd.bat, win/rules.vc, win/tcl.m4, win/tkConfig.sh.in, win/tkWin.h
\setcounter{enumi}{85}
\item{}
\textbf{Test Tools} --- generic/tkTest.c, macosx/tkMacOSXTest.c, win/tkWinTest.c, tests/all.tcl, tests/defs.tcl, tests/visual\_bb.test
\setcounter{enumi}{86}
\item{}
\textbf{Logos} --- library/images/logo.eps, library/images/logo100.gif, library/images/logo64.gif, library/images/logoLarge.gif, library/images/logoMed.gif, library/images/pwrdLogo.eps, library/images/pwrdLogo100.gif, library/images/pwrdLogo150.gif, library/images/pwrdLogo175.gif, library/images/pwrdLogo200.gif, library/images/pwrdLogo75.gif, library/images/tai-ku.gif, macosx/Wish.icns, win/lamp.bmp, win/rc/tk.ico, win/rc/wish.ico
\end{enumerate}

\subsection{Themed Tk (Ttk)}
\begin{enumerate}
\setcounter{enumi}{87}
\item{}
\textbf{Themed Tk} --- doc/ttk\_*, generic/ttk/*, library/ttk/*, tests/ttk/*, macosx/ttkMacOSXTheme.c, win/ttkWinMonitor.c, win/ttkWinTheme.c, win/ttkWinXPTheme.c
\end{enumerate}

\section{Shared Files}

The following files are shared by all of Tk. Any maintainer may modify them as necessary to complete changes they are making to their portion of Tk. Some of the following files define Tk's API and should be changed only with TCT approval.
\begin{itemize}
\item{}
ChangeLog, doc/tkvars.n, doc/TkInitStubs.3, doc/man.macros, generic/tk.decls, generic/tk.h, generic/tkInt.decls, generic/tkInt.h, generic/tkPort.h, generic/tkStubLib.c, library/unsupported.tcl, macosx/tkMacOSXInt.h, macosx/tkMacOSXPort.h, unix/tkUnixInt.h, unix/tkUnixPort.h, win/tkWinInt.h, win/tkWinPort.h
\end{itemize}

\section{Generated Files}

The following files are generated, so they don't need maintainers.
\begin{itemize}
\item{}
generic/ks\_names.h, generic/tkDecls.h, generic/tkIntDecls.h, generic/tkIntPlatDecls.h, generic/tkIntXlibDecls.h, generic/tkPlatDecls.h, generic/tkStubInit.c, library/demos/tclIndex, library/tclIndex, unix/configure, unix/mkLinks, win/configure
\end{itemize}

\section{Platform Dependencies}

In addition to the division into functional areas, responsibility for a given area can also be qualified by one or more \textit{platform} specifiers. Some areas, like \textbf{Windows Configuration and Build Tools} are obviously platform specific, so the qualification is unnecessary. Others, like \textbf{Canvas Items}, are wholly generic. But others, like \textbf{Button}, \textbf{Scale} or \textbf{Scrollbar} contain code for all platforms.

A maintainer can sign up for one of these latter areas, but specify support for only one platform. This means that that person will be responsible for the generic code in this area, in conjunction with the other platform maintainers in this area, and the platform specific code in that area.

The point behind sharing the generic code among all the maintainers is so that any changes to the Tk visible face of the widget be designed in concert for all platforms. Therefore, it is the responsibility of a platform maintainer for one platform who is sponsering a new feature for that area to work with the other platform maintainers to ensure that the feature is implemented on all platforms. One of the strengths of Tk is its cross-platform nature, and one of the maintainer's jobs is to ensure that this continues.

Procedurally, the maintainer will be listed as \textbf{Button Widget --- Mac OS X}, etc. A maintainer for a given area can sign up for one or more platforms. Due to the good design of the Tk's platform dependencies, determining which files are generic, and which are platform specific is trivial. The generic ones are in the \textit{generic} directory, the Mac ones in the \textit{macosx} directory, etc. Similarly, an area which has NO files in the macosx, win, or unix directories is a generic area, and no qualifiers are needed.

\section{Copyright}

This document has been placed in the public domain.

\section{Colophon}

\textit{TIP AutoGenerator --- written by Donal K. Fellows}
\begin{thebibliography}{TIP \#6}
\addcontentsline{toc}{section}{References}
\bibitem[TIP \#0]{tip0}
John Ousterhout,
\emph{Tcl Core Team Basic Rules},
on-line at \url{http://purl.org/tcl/tip/0.html}
\bibitem[TIP \#16]{tip16}
Don Porter,
Daniel Steffen,
\emph{Tcl Functional Areas for Maintainer Assignments},
on-line at \url{http://purl.org/tcl/tip/16.html}
\bibitem[TIP \#18]{tip18}
Peter Spjuth,
\emph{Add Labels to Frames},
on-line at \url{http://purl.org/tcl/tip/18.html}
\bibitem[TIP \#30]{tip30}
Don Porter,
Donal K. Fellows,
Jan Nijtmans,
Todd M. Helfter,
Chengye Mao,
George B. Smith,
Miguel Ba\~{n}\'{o}n,
Daniel Steffen,
Peter Spjuth,
Jeff Hobbs,
Vince Darley,
Donal K. Fellows,
Benjamin Riefenstahl,
Pat Thoyts,
Vince Darley,
Peter Spjuth,
\emph{Tk Toolkit Maintainer Assignments},
on-line at \url{http://purl.org/tcl/tip/30.html}
\bibitem[TIP \#41]{tip41}
Eric Melski,
\emph{Paned Window Tk Widget},
on-line at \url{http://purl.org/tcl/tip/41.html}
\bibitem[TIP \#48]{tip48}
Fr\'{e}d\'{e}ric Bonnet,
Fr\'{e}d\'{e}ric Bonnet,
\emph{Tk Widget Styling Support},
on-line at \url{http://purl.org/tcl/tip/48.html}
\end{thebibliography}
\end{document}
