diff --git a/TODO b/TODO
deleted file mode 100644
index fe091cb..0000000
--- a/TODO
+++ /dev/null
@@ -1,645 +0,0 @@
-======================================================================
-Things to do before releasing Pyton 1.4 the final cut:
-
-Win/NT specific things:
-
-... pyc files remain open when imported???
-
-... no control-c or control-break in Windows Console mode???
-    (implement Mark's hacks) (seems to work now?)
-
-Bugs:
-
-... exception in __del__ when __builtins__ has been deleted
-
-Features:
-
-... simple threading support (with lock) for Tk
-
-... Create and distribute the generic Makefile.pre.in for outside extensions.
-
-Documentation:
-
-... Add section on filesystem interface to tutorial
-
-... Update tutorial for changes in the language & library
-
-... New sections for library reference manual (use NEWS file for hints)
-
-... add stuff to ext.tex about threads and embedded Python
-
-... mention that -2147483648 doesn't work
-
-... mention that 0e0 and 01.0 etc. don't work
-
-Maybe not (yet):
-
-... get rid of 'owner' passed around for newframeobject and evalcode
-
-... Get freeze working for NT?  (Sam has one)
-
-... rename init<module> to PyInit_<module>.
-
-... import ni seems to interpret the current directory as a package.
-
-... math.sqrt(1j) should raise TypeError!!!  (To fix in getargs 'd' format.)
-
-... add make target that does machdep install; use in "machdepinstall"
-
-... prototype for PyOS_CheckStack() somewhere
-
-... On some Linuxes, ``python -c "print 12" | wc'' produces no output???
-
-... Add INSTALL_ROOT variable to Makefile.in
-
-... More thread testing (Solaris?), wait for David Arnold
-
-... Get rid of more modules: (stdwin, soundex, SGI specific?)
-
-... Use autoconf features to find X11 libraries
-
-... Use more modern autoconf features (e.g. for platform testing)
-
-Done:
-
-(*) get bsddb.c patch
-
-(*) no trailing separator on sys.path[0] please
-
-(*) add PC template for extensions, + instructions
-
-(*) segv on NT after ^Z after import _tkinter
-
-(*) apply(<class>, (), {}) fails while apply(<class>, ()) succeeds
-    if class has no __init__ method
-
-(*) core dump on complex % or divmod
-
-(*) New last chapter of tutorial explaining new things (use NEWS file)
-
-(*) Update reference manual for complex, power, slice and ellipses
-
-(*) Update Misc/FAQ
-
-(*) Update README for 1.4 final cut
-
-(*) Update documentation for httplib
-
-(*) SyntaxErrors w/o line numbers
-
-(*) More NeXT patches (Bill Bumgarner, Lele Gaifax)
-
-(*) fix file upload in cgi.py from Netscape
-
-(*) Tkinter.Variable.__del__ may cause (ignored) exceptions
-
-(*) Test for -lreadline *without* -lterm{cap,lib}
-
-(*) autotest fails on NT due to 1e-005 instead of 1e-05
-
-(*) Update 1.3 version number and date occurring in tutorial, Misc/FAQ,
-    Doc/texipre.dat, Doc/boilerplate.tex, Doc/tut.tex example
-
-(*) Fix the freeze script
-
-(*) merge Fred's changes to formatter.py and other stuff in Grail/pythonlib
-
-(*) urllib.py: open_http() has bogosity when proxy and auth used together
-
-(*) Update Misc/NEWS
-
-(*) Get rid of obsolete modules: objc, environment
-
-(*) Try threads on NT?
-
-(*) get rid of remains of access.c
-
-(*) document the fact that __del__ exceptions get lost
-
-(*) print warning when __del__ raises exception (no SystemExit though)
-
-(*) document all new features of string.py and regsub.py
-
-(*) add delitem, delslice to operator.c
-
-(*) get rid of 'or', 'and' in operator.c (or rename to 'or_', 'and_')
-
-(*) Pass LDFLAGS from configure to Makefile?
-
-(*) -L option for -lreadline comes too late
-
-(*) halfbinop PROTO(...) triggers error on Alpha compiler?
-
-(*) operator.c is not K&R C nor is it ANSI C
-
-(*) some complex numbers code is not K&R
-
-(*) More AIX sharedlibs patches (Manus Hand, Vlad)
-
-	Delete Modules/bindit
-	Add Modules/python.ext
-
-(*) #undef for fabs in mathmodule.c from Jack
-
-(*) Fix _tkinter.c for use on NT
-
-(*) Remove AIX shared libraries in make clean target
-    Remove *.sl in "make clean" targets
-
-(*) Sjoerd's optimizations
-
-(*) remove access stmt from docs
-
-(*) Lance's patches for SCO
-
-(*) Jim H's patch to fix power
-
-(*) rip out all traces of 'access'
-
-(*) New extref.tex from Richard Jones
-
-(*) ref.man patch by Anthony Baxter for lambda scope
-
-(*) Add extensions reference to ext.tex
-
-(*) generic/regen is bogus
-
-======================================================================
-======================================================================
-The following is old and I haven't checked whether it still applies:
-
-(-) many module should export their symbolic constants instead of
-relying on a module written in Python
-
-(-) change regexmodule.c to cooperate with other non-python users and
-to export the symbolic constants
-
-(-) save/restore sys.exc_{type,value,traceback} around except clauses.
-
-(-) don't call class instance's __del__ more than once?????
-
-(-) add "access" to posix?  What name should it have?
-
-(-) add facility to "freeze" lists and dictionaries?
-
-(-) add WNOHANG to posix
-
-(-) support lists in newgetargs()
-
-(-) syntax errors detected during compilation should give line number
-
-(-) dbm.open(): rwmode, filemode should be made optional; same for gdbm
-
-(-) find a bsd hash interface
-
-(-) posix.mkdir(): mode should be made optional
-
-(-) find a more useful order than alphabetical for Doc/libfuncs.tex
-
-======================================================================
-
-(*) use my getopt.c on Linux
-
-(*) get Extensions/X11/Doc checked in and out
-
-(-) investigate PPRC <URL:ftp://ftp.parc.xerox.com/pub/ppcr/>
-
-(*) add buffering parameter to fdopen() and popen()
-
-(-) interface to getdtablesize() in posix
-
-(-) reentrancy with global variables vs. decref in
-./Modules/cdmodule.c ./Modules/flmodule.c ./Objects/accessobject.c
-./Objects/frameobject.c ./Python/traceback.c
-
-(*) fix reentrancy in list updates?
-
-(-) speed up regsub.gsub
-
-(*) change md5.md5() to md5.new()
-
-(-) try posixenviron.c and merge back into posixmodule.c?
-
-(*) document chown()
-
-(-) add and document chroot() ?
-
-(*) use add gethostname_r and release thread lock when it exists
-
-(-) Add `@CFLAGS@', `@CPPFLAGS@', and `@LDFLAGS@' to `Makefile.in'
-
-(-) modules should be able to define a module destructor hook
-
-(-) destroy modules in reverse order of importation?
-
-(-) make array a standard built-in object
-
-(-) makesetup should accept .o files without corresponding .c file
-
-(*) use autoconf 2.0
-
-======================================================================
-Release 1.1.1 (10 Nov 1994)
-======================================================================
-
-(-) try Boehm/Dehmers/Weiser conservative garbage collector
-
-(*) implement new 'flatten' module
-
-(-) document new Python/C API
-
-(*) __import__, module imp
-
-(-) add various things to module dictionary, e.g. pathname, dictionary
-where found, __version__ string?
-
-(-) pass dict of builtins to exec / execfile / eval ???
-
-(?) stack frame correspondence problem (Jim Roskind)
-(probably solved by err_fetch / err_restore)
-
-(-) make lots of places use newgetargs
-
-(*) no tp_str member in typeobject
-
-(-) readline 2.0 on sequent has ^C problem (works only first time)
-
-(*) add explanatory comments to Setup (especially about SGI modules
-like 'cd')
-
-(-) need to add truncate() and ftruncate() to posixmodule.c (Windows:
-chsize(fd, size) (solution: added to file objects instead)
-
-======================================================================
-Release 1.1 (11 Oct 1994)
-======================================================================
-
-(-) improve performance of list.append/insert etc. by keeping high/low
-watermark instead of realloc'ing each time?
-
-(-) findmethod should cache (also findmember?)
-
-(-) sysget("check_interval") is called before each method call which
-breaks dictlookup caching
-
-(*) core dump on import of ridiculously long module name
-
-(-) core dump on repr / print of deeply nested or recursive object
-
-(*) parsing from string should calculate line numbers
-
-(-) whrandom doc needs update
-
-(*) mpz power is still binary insterad of ternary
-
-(*) design interface to call arbitrary asynchronous routines
-
-(*) whrandom.set...(0,0,0) doesn't generate random numbers
-
-(*) Lance's latest curses additions
-
-(*) Jack's new code:
-	(*) new xxmodule.c
-	(*) mac has type for .pyc files
-	(*) should run .pyc files when passed as command line argument
-
-(*) all new all singing all dancing freeze script
-
-(*) make clean should remove *.so and not Makefile.pre
-
-(-) fix signalmodule.c to re-establish SIGC[H]LD handler
-
-(*) try out Kees Blom's railroad diagram generator
-
-(-) redesign error handling (cf. Donald's mail)
-
-(*) do MPW and THINK still not support sys_errlist?  Indeed not (neither).
-
-(-) does MPW 3.2 need the MPW_881_BUG defined in Parser/acceler.c
-
-(-) rename MPW_3_1 define (which really means 3.x)
-
-(*) incorporate urlparse.py, uu.py
-
-(*) rewrite instance __getattr__ etc. to store ptr in class instead of
-instance -- also have separate __delattr__
-
-(-) add warning to docs about sys.exc_traceback and sys.last_traceback.
-
-(-) Some stdwin wishes:
-
-    (-) stdwinmodule should keep track of textedit rec's per window
-	(in a chain) so it can unlink them when the window is closed
-	before the te rec
-
-    (-) textedit flashes at return or backspace
-
-    (-) there's no way to show the text caret after a multi-line paste?
-
-(*) termios module
-
-(*) put signal patches out separately
-
-(-) latex docs for signal module
-
-(*) More MPW and Mac changes
-
-(*) Sjoerd's compileall script
-
-(-) systematically create /usr/local/lib/python/<machine>-<os>/
-    subdirectories, with a lib/ subdirectory containing the lib*.a
-    files etc.
-
-(-) need newer DOS binary (16 bit version doesn't do default args)
-
-(*) support for dynamically loadable libraries in makesetup and Extensions.
-    e.g. add a make rule to build .so files (unfortunately need to figure
-    out what ld option is needed) (more appropriate for makesetup
-    script?)
-
-(*) Move tkinter into the standard Modules directory; Tkinter c.s. to
-    Lib/tkinter etc. (???)
-
-(-) document Tk
-
-(-) class browser
-
-(-) interactive Python GUI (a la NT thingie)
-
-(*) speedup finddfa (and classify?)
-
-(-) more stuff under CVS (demo, extensions)
-
-(*) Mac port of 1.1
-
-(*) Mac port of STDWIN 0.9.9 to THINK C 6.0
-
-(-) use const for char * parameters (and many more) where possible
-
-(-) The Great Renaming!
-
-(*) redo __xxx__ operators for class instances
-
-(-) document __getattr__, __setattr__
-
-(*) add __delattr__ to class instances
-
-(-) many things that take strings should also take arrays of chars
-
-(-) add list of existing extensions to FAQ
-
-(-) update "recent additions" chapter in tutorial
-
-(-) rewrite "output formatting" chapter in tutorial
-
-(*) pass OPT from environment via configure to Makefile
-
-(*) version.c should be recompiled for each link
-
-(*) stropmodule should export find/rfind instead of index/rindex
-
-(*) add __getattr__, __setattr__ to class instances
-
-(*) fix pow(x, y, z) for integers
-
-(*) add tuple(seq) to turn any sequence into a tuple
-
-(*) Win32s for PC
-
-(*) integrate NT changes
-
-(*) write a script and add a "Make" rule (perhaps) that changes
-    #!/usr/local/bin/python to something else in all scripts around.
-
-(*) int*int overflow check shouldn't doubles on alpha (cf. John Tromp's mail)
-
-(*) add signal.alarm()
-
-(*) when abort()ing because of unexpected exception, print a message
-    first (Jack)
-
-----------------------------------------------------------------------
-(from BUGS1.0.1)
-----------------------------------------------------------------------
-(-) document addpack, urllib, ...
-
-(*) import.c from JaapV
-
-(*) document os.exec*
-
-(*) name sunaudiodevmodule.c is too long
-
-(*) play with / include SUIT interface
-
-(-) make regsub.[g]sub() optionally case insensitive
-
-======================================================================
-
-(*) ought to use features from autoconf 1.8
-
-(*) errors in __repr__() are handled wrong when called from format
-
-(*) long(0x80000000) has wrong value!
-
-(-) hex(0x80000000) shouldn't have sign (?)
-
-(*) need way to set buffering at file open time
-
-(*) need way to force stdout unbuffered
-
-(*) restart CVS tree
-
-(?) build shared libs for SunOS 4.1.3
-
-(-) dynamic linking on the Mac (is this a dream?)
-
-(*) X patches from Adrian Phillips
-
-(*) Jaap's freeze script
-
-(-) Incorporate with contrib status:
-    - additions to glmodule by rg3h
-    (*) Jaap's posixfile module (with locking)
-    (*) pthreads interface
-
-(-) Later:
-    - put the offending object in IOError and posix.error
-    - make module marshal work with user-defined file-like objects
-    - built-in help?
-    - hierarchical module names?
-
-Big plans:
-
-- allow separate interpreters (a la Xt's Applocation Contexts, and Tcl)
-- great renaming
-- complete reflexive nature of the language, e.g. have interfaces et
-create any kind of object
-(*) GUI interface a la Tk
-
-
-======================================================================
-For FAQ:
-
-(*) why don't strings (numbers, tuples, ...) have methods / attributes
-
-(*) why are strings / numbers / tuples immutable
-
-why don't list methods return self
-
-======================================================================
-PM/TODO list after Egypt (from mailing list):
-
-make .pyc files executable (how?)
-
-thread status and improvements (lock stmt; signal/wait)
-
-optional optimizations
-
-pthread migration
-
-(*) test/incorporate new SUIT
-
-shorten excessively long filenames (sunaudiodevmodule.c)
-
-(*) default parameter values
-
-multiple interpreter objects
-
-(*) import shlib bug (irix5.2) (reload, dlclose)
-
-(*) addpack.py
-
-(*) newmodule.c (or other hacks to create new modules, classes, functions
-    etc. from their components)
-
-persistency
-
-new Dbhash.py, dbhash library
-
-(-) reraise; or raise 3rd param for traceback?
-    -or- except type, value, tbackobjec
-
-(-) redesign exceptions from scratch?
-
-(-) dbm objects miss items(), values() methods
-
-(*) jar's new profile
-
-(-) answer q about coerce()
-
-(*) reconsider pass [expression] ??? -or- don't print non-interactive
-    exprs -or- option to suppress printing non-None expressions
-
-(*) should be able to hash code objs (add fns to convert between lists/tuples)
-
-(-) describe() ?
-
-(-) distribute demo2 with Holmes
-
-(*) re-reply on try-continue
-
-(-) classes are too slow
-
-(-) add += etc. ?
-
-optimize tuple = tuple
-
-allow (a, b) = [1, 2] and [1, 2] = (1, 2) ???
-
-wustl is not un the northwest of the US?
-
-(*) MPW doesn't like \000 in string literals?
-
-MPW patches, unixemu patches
-
-prepare tar files with
-	- mac think projects (*)
-	- mpw makefiles
-	- dos makefiles
-	- mac unixemu lib
-
-explain rules about == vs. 'is' for strings (* by others on the list)
-
-(*) bug in ceval.c DELETE_FAST
-
-(*) possible optimize LOAD_NAME -> LOAD_GLOBAL
-
-get dos python with suit (inesc)
-
-(*) docs for try/continue are wrong and unclear
-
-better hashing fn?
-
-(*) add improved nested indent to python-mode.el
-
-(*) add a section to tutorial on "new" features
-
-rewrite section on formatting in tutorial
-
-======================================================================
-TODO-TOO list:
-
-test for overflow when converting python long to float
-
-lift restrictions on tuple or list in many cases
-
-(*) allow long ints with sensible values for getargs "i"
-
-(*) multiline string literals
-
-what to do about 64-bit int literals (on 64-bit machines) in .pyc
-files?  (Currently truncated w/o warning!)
-
-DOCUMENTATION UPDATE!  E.g. ref.tex doesn't describe:
-(*)	- line joins w/o backslash
-(*)	- double-quoted strings; \" in strings
-	- more?
-Should double-check all changes with docs!
-
-(?) Interrupting output still sometimes doesn't call clearerr() properly
-
-sometimes ghost errors when interrupting during debugging in
-'continue' mode?
-
-typing a comment to a primary prompt shouldn't issue a secondary prompt
-
-readline: add hooks to recognize Python syntax and to expand Python
-commands and names
-
-should have absolute pathnames in function objects
-
-in general check that all the exceptions are modernized and that the
-messages aren't giving the same error twice (e.g., stdwinmodule.c!)
-
-- check read/write allowed for file objects
-
-- introduce macros to set/inspect errno for syscalls, to support things
-  like getoserr()
-
-======================================================================
-DOS/Windows Python
-
-(???) command line options?
-
-(*) os.system()
-
-(???) interrupts
-
-(???) wrap
-
-(*) pc module
-
-(*) dospath.py
-
-DOS/Windows Python -- TO DO
-
-(*) memtest from config.h
-
-(*) copy sources back
-
-(*) build DOS version
-
-(*) distribute 386 version
-
-(*) Mac 1.0.1 release?
-======================================================================
