<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE TIP SYSTEM "http://tcl.activestate.com/cgi-bin/tct/tip/tipxml.dtd">
<!-- Converted at Sat May 25 12:04:18 GMT 2013 -->
<!-- TIP AutoGenerator - written by Donal K. Fellows -->

<TIP number='16'>
<header><title>Tcl Functional Areas for Maintainer Assignments</title><author address="mailto:dgp@users.sourceforge.net">Don Porter</author><author address="mailto:das@users.sourceforge.net">Daniel Steffen</author><status type='process' state='accepted' vote='after'>$Revision: 1.47 $</status><history></history><created day='21' month='nov' year='2000' /></header>
<abstract>This document proposes a division of Tcl&apos;s source code into functional areas so that each area may be assigned to one or more maintainers.</abstract>
<body><section title="Background">
<para>TCT procedures (see <tipref type="text" tip="0"/>) call for each <emph style="italic">maintainer</emph> to be responsible for a portion of Tcl&apos;s source code. Certain portions of Tcl&apos;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 <emph style="italic">natural</emph> division of Tcl&apos;s source code into units needing maintainers is a useful preliminary effort toward a public call for volunteer maintainers.</para>
<para>See <tipref type="text" tip="24"/> for the mapping of these functional areas to maintainers.</para>
</section>
<section title="Rationale">
<para>When someone reports a bug, or offers a patch, he will want to be able to determine what maintainers have oversight over his report. This implies that we seek a simple mapping from something he knows about his bug or patch to the set of maintainers.</para>
<para>For a patch, the submitter certainly knows what file(s) she is patching. For a bug report, the reporter is likely to know what command or C function he believes to be buggy. Fortunately, every C function or Tcl command (combined with the platform) can be associated with exactly one source code file, the file providing the definition of the C function, or the command procedure of the Tcl command. Thus, a mapping from source code file to maintainer is sufficient to complete the determination.</para>
<para>The source code file should not be the largest unit, however. Certain sets of files should each be gathered into a larger unit, all files in that unit with the same maintainer(s). Tcl&apos;s man pages already gather related routines and commands into one page of documentation. Using the modules implied by the man pages, and by the location of routines in particular source code files, a <emph style="italic">natural</emph> division of Tcl into minimal maintainer units follows in the Proposal section below.</para>
<para>It may be that some of these minimal units can be joined together into still larger related units. That is not necessary, though. We can just have the same maintainer(s) assigned to all the related minimal units.</para>
</section>
<section title="Functional Areas">
<para>Tcl shall be divided into the following functional units, each to be assigned one or more maintainers:</para>
<subsection title="Events">
<enumerate><item.e index='1'><para><emph style="bold">Notifier</emph> - doc/CrtFileHdlr.3, doc/DoOneEvent.3, doc/Notifier.3, doc/Sleep.3, generic/tclNotify.c, macosx/tclMacOSXNotify.c, tests/notify.test, tests/unixNotfy.test, tests/winNotify.test, unix/tclUnixNotfy.c, unix/tclUnixEvent.c, win/tclWinNotify.c</para></item.e><item.e index='2'><para><emph style="bold">Event Loops</emph> - doc/bgerror.n, doc/update.n, doc/vwait.n, doc/BackgdErr.3, doc/Exit.3, generic/tclEvent.c, tests/event.test</para></item.e><item.e index='3'><para><emph style="bold">Timer Events</emph> - doc/after.n, doc/CrtTimerHdlr.3, doc/DoWhenIdle.3, generic/tclTimer.c, tests/timer.test</para></item.e><item.e index='4'><para><emph style="bold">Asynchronous Events</emph> - doc/Async.3, generic/tclAsync.c, tests/async.test</para></item.e><item.e index='5'><para><emph style="bold">Xt Based Notifier</emph> - unix/tclXtNotify.c, unix/tclXtTest.c</para></item.e><item.e index='6'><para><emph style="bold">Time Measurement</emph> - compat/gettod.c, compat/strftime.c, doc/clock.n, generic/tclClock.c, generic/tclGetDate.y, library/tzdata/*, tests/clock.test, tests/winTime.test, tools/loadICU.tcl, tools/makeTestCases.tcl, tools/tclZIC.tcl, unix/tclUnixTime.c, win/tclWinTime.c</para></item.e></enumerate>
</subsection>
<subsection title="Variables">
<enumerate><item.e index='7'><para><emph style="bold">Variable Commands and Interfaces</emph> - doc/append.n, doc/array.n, doc/global.n, doc/lappend.n, doc/lset.n, doc/set.n, doc/unset.n, doc/upvar.n, doc/variable.n, doc/SetVar.3, doc/UpVar.3, generic/tclVar.c, tests/append.test, tests/lset.test, tests/set.test, tests/set-old.test, tests/upvar.test, tests/var.test</para></item.e><item.e index='8'><para><emph style="bold">Environment Variables</emph> - doc/Environment.3, generic/tclEnv.c, tests/env.test</para></item.e><item.e index='9'><para><emph style="bold">Linked C Variables</emph> - doc/LinkVar.3, generic/tclLink.c, tests/link.test</para></item.e></enumerate>
</subsection>
<subsection title="Objects">
<enumerate><item.e index='10'><para><emph style="bold">Object System and Fundamental Object Types</emph> - doc/Backslash.3, doc/BoolObj.3, doc/Concat.3, doc/DoubleObj.3, doc/DString.3, doc/Encoding.3, doc/FindExec.3, doc/Hash.3, doc/IntObj.3, doc/Object.3, doc/ObjectType.3, doc/PrintDbl.3, doc/SplitList.3, doc/StringObj.3, doc/StrMatch.3, generic/tclEncoding.c, generic/tclHash.c, generic/tclObj.c, generic/tclStringObj.c, generic/tclUtil.c, library/encoding/*.enc, tools/encoding/*, tests/dstring.test, tests/encoding.test, tests/stringObj.test, tests/obj.test, tests/util.test</para></item.e><item.e index='11'><para><emph style="bold">Conversions From String</emph> - doc/GetInt.3, generic/tclGet.c, tests/get.test</para></item.e><item.e index='12'><para><emph style="bold">bytearray Object Type</emph> - doc/binary.n, doc/ByteArrObj.3, generic/tclBinary.c, tests/binary.test</para></item.e><item.e index='13'><para><emph style="bold">index Object Type</emph> - doc/GetIndex.3, doc/WrongNumArgs.3, generic/tclIndexObj.c, tests/indexObj.test</para></item.e><item.e index='14'><para><emph style="bold">list Object Type</emph> - doc/ListObj.3, generic/tclListObj.c, tests/listObj.test</para></item.e><item.e index='15'><para><emph style="bold">dict Object Type</emph> - doc/DictObj.3, doc/dict.n, generic/tclDictObj.c, tests/dict.test</para></item.e></enumerate>
</subsection>
<subsection title="Fundamental Built-in Commands">
<enumerate><item.e index='16'><para><emph style="bold">A - H</emph> - doc/break.n, doc/case.n, doc/catch.n, doc/cd.n, doc/concat.n, doc/continue.n, doc/encoding.n, doc/error.n, doc/eval.n, doc/exit.n, doc/expr.n, doc/file.n, doc/for.n, doc/foreach.n, doc/format.n, generic/tclCmdAH.c, tests/cmdAH.test tests/case.test, tests/concat.test, tests/error.test, tests/eval.test, tests/foreach.test, tests/format.test, tests/for-old.test</para></item.e><item.e index='17'><para><emph style="bold">I - L</emph> - doc/if.n, doc/incr.n, doc/info.n, doc/join.n, doc/lindex.n, doc/linsert.n, doc/list.n, doc/llength.n, doc/lrange.n, doc/lreplace.n, doc/lsearch.n, doc/lsort.n, generic/tclCmdIL.c, tests/cmdIL.test, tests/if-old.test, tests/incr-old.test, tests/info.test, tests/join.test, tests/lindex.test, tests/linsert.test, tests/list.test, tests/llength.test, tests/lrange.test, tests/lreplace.test, tests/lsearch.test</para></item.e><item.e index='18'><para><emph style="bold">M - Z</emph> - doc/pwd.n, doc/regexp.n, doc/regsub.n, doc/rename.n, doc/return.n, doc/split.n, doc/string.n, doc/subst.n, doc/switch.n, doc/throw.n, doc/time.n, doc/try.n, doc/while.n, generic/tclCmdMZ.c, tests/cmdMZ.test tests/pwd.test, tests/rename.test, tests/split.test, tests/string.test, tests/subst.test, tests/switch.test, tests/while-old.test</para></item.e><item.e index='19'><para><emph style="bold">[history]</emph> - doc/history.n, doc/RecEvalObj.3, doc/RecordEval.3, generic/tclHistory.c, library/history.tcl, tests/history.test</para></item.e><item.e index='20'><para><emph style="bold">[interp]</emph> - doc/interp.n, doc/CrtSlave.3, doc/Limit.3, generic/tclInterp.c, tests/interp.test</para></item.e><item.e index='21'><para><emph style="bold">[namespace]</emph> - doc/Namespace.3, doc/namespace.n, generic/tclEnsemble.c, generic/tclNamesp.c, generic/tclResolve.c, tests/namespace.test, tests/namespace-old.test</para></item.e><item.e index='22'><para><emph style="bold">[proc]</emph> - doc/proc.n, doc/uplevel.n, generic/tclProc.c, generic/tclTestProcBodyObj.c, tests/proc.test, tests/proc-old.test, tests/uplevel.test</para></item.e><item.e index='23'><para><emph style="bold">[scan]</emph> - doc/scan.n, generic/tclScan.c, tests/scan.test</para></item.e></enumerate>
</subsection>
<subsection title="Channels">
<enumerate><item.e index='24'><para><emph style="bold">Channel Commands</emph> - doc/close.n, doc/eof.n, doc/exec.n, doc/fblocked.n, doc/fconfigure.n, doc/fcopy.n, doc/flush.n, doc/gets.n, doc/open.n, doc/puts.n, doc/read.n, doc/seek.n, doc/socket.n, doc/tell.n, generic/tclIOCmd.c, tests/exec.test, tests/ioCmd.test, tests/remote.tcl, tests/socket.test</para></item.e><item.e index='25'><para><emph style="bold">Channel System</emph> - doc/chan.n, doc/fileevent.n, doc/ChnlStack.3, doc/CrtChnlHdlr.3, doc/CrtCloseHdlr.3, doc/CrtChannel.3, doc/DetachPids.3, doc/GetStdChan.3, doc/OpenFileChnl.3, doc/StdChannels.3 generic/tclIO.c, generic/tclIO.h, generic/tclPipe.c, tests/chan.test, tests/chanio.test, tests/io.test</para></item.e><item.e index='26'><para><emph style="bold">Channel Transformations</emph> - generic/tclIOGT.c, generic/tclIORTrans.c, tests/iogt.test, tests/ioTrans.test</para></item.e><item.e index='27'><para><emph style="bold">Built-in Channel Types</emph> - compat/waitpid.c, doc/GetHostName.3, doc/GetOpnFl.3, doc/OpenTcp.3, doc/pid.n, generic/tclIOSock.c, generic/tclIORChan.c, tests/pid.test, tests/winConsole.test, tests/winPipe.test, unix/tclUnixChan.c, unix/tclUnixPipe.c, unix/tclUnixSock.c, win/cat.c, win/stub16.c, win/tclWinChan.c, win/tclWinConsole.c, win/tclWinPipe.c, win/tclWinSerial.c, win/tclWinSock.c</para></item.e></enumerate>
</subsection>
<subsection title="Packages">
<enumerate><item.e index='28'><para><emph style="bold">dde Package</emph> - doc/dde.n, library/dde/pkgIndex.tcl, tests/winDde.test win/tclWinDde.c</para></item.e><item.e index='29'><para><emph style="bold">http Package</emph> - doc/http.n, library/http1.0/http.tcl, library/http1.0/pkgIndex.tcl, library/http/http.tcl, library/http/pkgIndex.tcl, tests/http.test, tests/httpd, tests/httpold.test</para></item.e><item.e index='30'><para><emph style="bold">msgcat Package</emph> - doc/msgcat.n, library/msgcat/msgcat.tcl, library/msgcat/pkgIndex.tcl, tests/msgcat.test</para></item.e><item.e index='31'><para><emph style="bold">opt Package</emph> - library/opt/optparse.tcl, library/opt/pkgIndex.tcl, tests/opt.test</para></item.e><item.e index='32'><para><emph style="bold">registry Package</emph> - doc/registry.n, library/reg/pkgIndex.tcl, win/tclWinReg.c, tests/registry.test</para></item.e><item.e index='33'><para><emph style="bold">Safe Base</emph> - doc/safe.n, library/safe.tcl, tests/safe.test</para></item.e><item.e index='34'><para><emph style="bold">tcltest Package</emph> - doc/tcltest.tcl, library/tcltest/tcltest.tcl, library/tcltest/pkgIndex.tcl, tests/tcltest.test</para></item.e><item.e index='35'><para><emph style="bold">TclOO Package</emph> (see <tipref type="text" tip="257"/>) - doc/Class.3, doc/Method.3, doc/class.n, doc/copy.n, doc/define.n, doc/my.n, doc/next.n, doc/object.n, doc/self.n, generic/tclOO.c, generic/tclOO.decls, generic/tclOO.h, generic/tclOOBasic.c, generic/tclOOCall.c, generic/tclOODefineCmds.c, generic/tclOOInfo.c, generic/tclOOInt.h, generic/tclOOMethod.c, tests/oo.test</para></item.e></enumerate>
</subsection>
<subsection title="File System">
<enumerate><item.e index='36'><para><emph style="bold">Pathname Management</emph> - doc/filename.n, doc/glob.n, doc/FileSystem.3, doc/SplitPath.3, doc/Translate.3, generic/tclFileName.c, tests/fileName.test, tests/unixFile.test, tests/winFile.test, unix/tclUnixFile.c, win/tclWinFile.c</para></item.e><item.e index='37'><para><emph style="bold">File System Access</emph> - doc/Access.3, doc/GetCwd.3, doc/SetErrno.3, doc/Signal.3, generic/tclFCmd.c, generic/tclIOUtil.c, generic/tclPathObj.c, generic/tclPosixStr.c, macosx/tclMacOSXFCmd.c, tests/fCmd.test, tests/ioUtil.test, tests/unixFCmd.test, tests/winFCmd.test, unix/tclUnixFCmd.c, win/tclWinError.c, win/tclWinFCmd.c</para></item.e></enumerate>
</subsection>
<subsection title="Initialization, Script Library, and Autoloader">
<enumerate><item.e index='38'><para>doc/library.n, doc/tclvars.n, doc/unknown.n, doc/Init.3, doc/SourceRCFile.3, generic/tclInitScript.h, library/auto.tcl, library/init.tcl, library/parray.tcl, library/word.tcl, macosx/tclMacOSXBundle.c, tests/autoMkindex.tcl, tests/autoMkindex.test, tests/init.test, tests/platform.test, tests/security.test, tests/unixInit.test, tests/unknown.test, unix/tclUnixInit.c, win/tclWinInit.c</para></item.e></enumerate>
</subsection>
<subsection title="Package Support">
<enumerate><item.e index='39'><para><emph style="bold">Package Management</emph> - doc/InitStubs.3, doc/package.n, doc/packagens.n, doc/pkgMkIndex.n, doc/PkgRequire.3, doc/tm.n, generic/tclPkg.c, generic/tclStubLib.c, library/package.tcl, library/tm.tcl, tests/package.test, tests/pkg.test, tests/pkgMkIndex.test, tests/pkg/*.tcl, tests/tm.test</para></item.e><item.e index='40'><para><emph style="bold">Dynamic Loading</emph> - compat/dlfcn.h, doc/load.n, doc/StaticPkg.3, generic/tclLoad.c, generic/tclLoadNone.c, library/ldAout.tcl, tests/load.test, unix/dltest/*, unix/tclLoad*.c, win/tclWinLoad.c</para></item.e></enumerate>
</subsection>
<subsection title="Memory Management">
<enumerate><item.e index='41'><para><emph style="bold">Allocation</emph> - doc/memory.n, doc/Alloc.3, doc/TCL_MEM_DEBUG.3, doc/DumpActiveMemory.3, generic/tclAlloc.c, generic/tclCkalloc.c, generic/tclThreadAlloc.c</para></item.e><item.e index='42'><para><emph style="bold">Preservation</emph> - doc/Preserve.3, generic/tclPreserve.c</para></item.e></enumerate>
</subsection>
<subsection title="Regular Expressions">
<enumerate><item.e index='43'><para>doc/re_syntax.n, doc/RegExp.3, generic/regc_color.c, generic/regc_cvec.c, generic/regc_lex.c, generic/regc_locale.c, generic/regc_nfa.c, generic/regcomp.c, generic/regcustom.h, generic/rege_dfa.c, generic/regerror.c, generic/regerrs.h, generic/regex.h, generic/regexec.c, generic/regfree.c, generic/regfronts.c, generic/regguts.h, generic/tclRegexp.c, generic/tclRegexp.h, tests/reg.test, tests/regexp.test, tools/uniClass.tcl</para></item.e></enumerate>
</subsection>
<subsection title="UTF-8 String Management">
<enumerate><item.e index='44'><para>doc/ToUpper.3, doc/UniCharIsAlpha.3, doc/Utf.3, generic/tclUtf.c, tools/uniParse.tcl, tests/utf.test, win/tclWin32Dll.c</para></item.e></enumerate>
</subsection>
<subsection title="Fundamentals">
<enumerate><item.e index='45'><para><emph style="bold">Parsing and Evaluation</emph> - doc/AddErrInfo.3, doc/AllowExc.3, doc/AssocData.3, doc/CallDel.3, doc/CmdCmplt.3, doc/CrtCommand.3, doc/CrtObjCmd.3, doc/CrtInterp.3, doc/CrtMathFnc.3, doc/Eval.3, doc/ExprLong.3, doc/ExprLongObj.3, doc/GetVersion.3, doc/Interp.3, doc/NRE.3, doc/ParseCmd.3, doc/SaveResult.3, doc/SetRecLimit.3, doc/SetResult.3, doc/Tcl.n, generic/tclBasic.c, generic/tclParse.c, generic/tclParseExpr.c, generic/tclResult.c, tests/assocd.test, tests/basic.test, tests/cmdInfo.test, tests/dcall.test, tests/expr-old.test, tests/parse.test, tests/parseExpr.test, tests/parseOld.test, tests/result.test, tests/stack.test</para></item.e><item.e index='46'><para><emph style="bold">Traces</emph> - doc/TraceVar.3, doc/TraceCmd.3, doc/trace.n, doc/CrtTrace.3, generic/tclTrace.c, tests/trace.test</para></item.e><item.e index='47'><para><emph style="bold">Bytecode Compiler</emph> - compat/float.h, generic/tclCompCmds.c, generic/tclCompCmdsSZ.c, generic/tclCompExpr.c, generic/tclCompile.c, generic/tclCompile.h, generic/tclExecute.c, generic/tclLiteral.c, generic/tclMathOp.c, tests/appendComp.test, tests/compExpr-old.test, tests/compExpr.test, tests/compile.test, tests/execute.test, tests/expr.test, tests/for.test, tests/if.test, tests/incr.test, tests/lsetComp.test, tests/regexpComp.test, tests/stringComp.test, tests/while.test</para></item.e><item.e index='48'><para><emph style="bold">Number Handling</emph> (see <tipref type="text" tip="237"/>) - generic/tclStrToD.c, generic/tclTomMath.h, generic/tclTomMathInterface.c, generic/tommath.h, libtommath/*</para></item.e></enumerate>
</subsection>
<subsection title="Threads">
<enumerate><item.e index='49'><para>doc/Thread.3, generic/tclThread.c, generic/tclThreadJoin.c, tests/thread.test, unix/tclUnixThrd.c, unix/tclUnixThrd.h, win/tclWinThrd.c, win/tclWinThrd.h</para></item.e></enumerate>
</subsection>
<subsection title="Embedding Support">
<enumerate><item.e index='50'><para>doc/AppInit.3, doc/Tcl_Main.3, doc/Panic.3, doc/tclsh.1, generic/tclMain.c, generic/tclPanic.c, tests/main.test, unix/tclAppInit.c, win/tclAppInit.c</para></item.e></enumerate>
</subsection>
<subsection title="Release Engineering">
<enumerate><item.e index='51'><para><emph style="bold">Release Notes</emph> - README, changes, license.terms, */license.terms, compat/README, generic/README, macosx/README, tests/README, tests/pkg/license.terms, tools/README, unix/README, win/README</para></item.e><item.e index='52'><para><emph style="bold">Portability Support</emph> - compat/dirent.h, compat/dirent2.h, compat/limits.h, compat/fixstrtod.c, compat/memcmp.c, compat/opendir.c, compat/stdlib.h, compat/string.h, compat/strncasecmp.c, compat/strstr.c, compat/strtod.c, compat/strtol.c, compat/strtoul.c, compat/tclErrno.h, compat/tmpnam.c, compat/unistd.h, generic/tclMath.h, generic/tclPort.h, unix/tclMtherr.c, unix/tclUnixPort.h, unix/tclUnixCompat.c, win/tclWinMtherr.c, win/tclWinPort.h</para></item.e><item.e index='53'><para><emph style="bold">Configuration and Build Tools</emph> - djgpp/Makefile, macosx/Makefile, macosx/Tcl.pbproj/project.pbxproj, tests/all.tcl, tools/configure.in, tools/eolFix.tcl, tools/genStubs.tcl, tools/index.tcl, tools/Makefile.in, tools/man2help.tcl, tools/man2help2.tcl, tools/man2tcl.c, tools/mkdepend.tcl, tools/tcl.hpj.in, tools/tcl.wse.in, tools/tclSplash.bmp, tools/tcltk-man2html.tcl, tools/white.bmp, unix/Makefile.in, unix/aclocal.m4, unix/configure.in, unix/install-sh, unix/ldAix, unix/mkLinks, unix/mkLinks.tcl, unix/tcl.m4, unix/tcl.spec, unix/tclConfig.sh.in, win/Makefile.in, win/aclocal.m4, win/buildall.vc.bat, win/coffbase.txt, win/configure.in, win/makefile.vc, win/makefile.bc, win/mkd.bat, win/rmd.bat, win/rules.vc, win/tcl.dsp, win/tcl.dsw, win/tcl.hpj.in, win/tcl.m4, win/tcl.rc, win/tclConfig.sh.in, win/tclsh.ico, win/tclsh.rc</para></item.e><item.e index='54'><para><emph style="bold">Configuration Reporting</emph> (see <tipref type="text" tip="59"/>) - doc/RegConfig.3, generic/tclConfig.c, generic/tclPkgConfig.c, tests/config.test, win/tclWinPkgConfig.c</para></item.e><item.e index='55'><para><emph style="bold">Other Tools</emph> - tools/checkLibraryDoc.tcl, tools/findBadExternals.tcl, tools/genWinImage.tcl, tools/man2html.tcl, tools/man2html1.tcl, tools/man2html2.tcl, tools/regexpTestLib.tcl</para></item.e><item.e index='56'><para><emph style="bold">LibTomMath</emph> - libtommath/*</para></item.e><item.e index='57'><para><emph style="bold">zlib</emph> (see <tipref type="text" tip="234"/>) - doc/zlib.n, doc/TclZlib.3, generic/tclZlib.c, tests/zlib.c</para></item.e></enumerate>
</subsection>
</section>
<section title="Shared Files">
<para>The following files are shared by all of Tcl. Any maintainer may modify them as necessary to complete changes they are making to their portion of Tcl. Some of the following files define Tcl&apos;s API and should be changed only in accordance with TCT approval.</para>
<itemize><item.i><para>ChangeLog, ChangeLog.*, doc/man.macros, generic/tcl.decls, generic/tcl.h, generic/tclInt.decls, generic/tclInt.h, generic/tclTest.c, generic/tclTestObj.c, tests/misc.test, unix/tclUnixTest.c, win/tclWinInt.h, win/tclWinTest.c</para></item.i></itemize>
</section>
<section title="Generated Files">
<para>The following files are generated, so they don&apos;t need maintainers.</para>
<itemize><item.i><para>generic/tclDate.c, generic/tclUniData.c, generic/tclDecls.h, generic/tclIntDecls.h, generic/tclIntPlatDecls.h, generic/tclOODecls.h, generic/tclOOIntDecls.h, generic/tclOOStubInit.c, generic/tclOOStubLib.c, generic/tclPlatDecls.h, generic/tclStubInit.c, generic/tommath.h, library/tclIndex, unix/configure, win/configure</para></item.i></itemize>
</section>
<section title="Copyright">
<para>This document has been placed in the public domain.</para>
</section>
</body></TIP>
