diff --git a/Misc/HISTORY b/Misc/HISTORY
index 59e67af..4e10469 100644
--- a/Misc/HISTORY
+++ b/Misc/HISTORY
@@ -8,6 +8,2340 @@
 ======================================================================
 
 
+From 1.5.2c1 to 1.5.2 (final)
+=============================
+
+Tue Apr 13 15:44:49 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* PCbuild/python15.wse: Bump version to 1.5.2 (final)
+
+	* PCbuild/python15.dsp: Added shamodule.c
+
+	* PC/config.c: Added sha module!
+
+	* README, Include/patchlevel.h: Prepare for final release.
+
+	* Misc/ACKS:
+	More (Cameron Laird is honorary; the others are 1.5.2c1 testers).
+
+	* Python/thread_solaris.h:
+	While I can't really test this thoroughly, Pat Knight and the Solaris
+	man pages suggest that the proper thing to do is to add THR_NEW_LWP to
+	the flags on thr_create(), and that there really isn't a downside, so
+	I'll do that.
+
+	* Misc/ACKS:
+	Bunch of new names who helped iron out the last wrinkles of 1.5.2.
+
+	* PC/python_nt.rc:
+	Bump the myusterious M$ version number from 1,5,2,1 to 1,5,2,3.
+	(I can't even display this on NT, maybe Win/98 can?)
+
+	* Lib/pstats.py:
+	Fix mysterious references to jprofile that were in the source since
+	its creation.  I'm assuming these were once valid references to "Jim
+	Roskind's profile"...
+
+	* Lib/Attic/threading_api.py:
+	Removed; since long subsumed in Doc/lib/libthreading.tex
+
+	* Modules/socketmodule.c:
+	Put back __osf__ support for gethostbyname_r(); the real bug was that
+	it was being used even without threads.  This of course might be an
+	all-platform problem so now we only use the _r variant when we are
+	using threads.
+
+Mon Apr 12 22:51:20 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Modules/cPickle.c:
+	Fix accidentally reversed NULL test in load_mark().  Suggested by
+	Tamito Kajiyama.  (This caused a bug only on platforms where malloc(0)
+	returns NULL.)
+
+	* README:
+	Add note about popen2 problem on Linux noticed by Pablo Bleyer.
+
+	* README: Add note about -D_REENTRANT for HP-UX 10.20.
+
+	* Modules/Makefile.pre.in: 'clean' target should remove hassignal.
+
+	* PC/Attic/vc40.mak, PC/readme.txt:
+	Remove all VC++ info (except VC 1.5) from readme.txt;
+	remove the VC++ 4.0 project file; remove the unused _tkinter extern defs.
+
+	* README: Clarify PC build instructions (point to PCbuild).
+
+	* Modules/zlibmodule.c: Cast added by Jack Jansen (for Mac port).
+
+	* Lib/plat-sunos5/CDIO.py, Lib/plat-linux2/CDROM.py:
+	Forgot to add this file.  CDROM device parameters.
+
+	* Lib/gzip.py: Two different changes.
+
+	1. Jack Jansen reports that on the Mac, the time may be negative, and
+	solves this by adding a write32u() function that writes an unsigned
+	long.
+
+	2. On 64-bit platforms the CRC comparison fails; I've fixed this by
+	casting both values to be compared to "unsigned long" i.e. modulo
+	0x100000000L.
+
+Sat Apr 10 18:42:02 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* PC/Attic/_tkinter.def: No longer needed.
+
+	* Misc/ACKS: Correct missed character in Andrew Dalke's name.
+
+	* README: Add DEC Ultrix notes (from Donn Cave's email).
+
+	* configure: The usual
+
+	* configure.in:
+	Quote a bunch of shell variables used in test, related to long-long.
+
+	* Objects/fileobject.c, Modules/shamodule.c, Modules/regexpr.c:
+	casts for picky compilers.
+
+	* Modules/socketmodule.c:
+	3-arg gethostbyname_r doesn't really work on OSF/1.
+
+	* PC/vc15_w31/_.c, PC/vc15_lib/_.c, Tools/pynche/__init__.py:
+	Avoid totally empty files.
+
+Fri Apr  9 14:56:35 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Tools/scripts/fixps.py: Use re instead of regex.
+	Don't rewrite the file in place.
+	(Reported by Andy Dustman.)
+
+	* Lib/netrc.py, Lib/shlex.py: Get rid of #! line
+
+Thu Apr  8 23:13:37 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* PCbuild/python15.wse: Use the Tcl 8.0.5 installer.
+	Add a variable %_TCL_% that makes it easier to switch to a different version.
+
+
+======================================================================
+
+
+From 1.5.2b2 to 1.5.2c1
+=======================
+
+Thu Apr  8 23:13:37 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* PCbuild/python15.wse:
+	Release 1.5.2c1.  Add IDLE and Uninstall to program group.
+	Don't distribute zlib.dll.  Tweak some comments.
+
+	* PCbuild/zlib.dsp: Now using static zlib 1.1.3
+
+	* Lib/dos-8x3/userdict.py, Lib/dos-8x3/userlist.py, Lib/dos-8x3/test_zli.py, Lib/dos-8x3/test_use.py, Lib/dos-8x3/test_pop.py, Lib/dos-8x3/test_pic.py, Lib/dos-8x3/test_ntp.py, Lib/dos-8x3/test_gzi.py, Lib/dos-8x3/test_fcn.py, Lib/dos-8x3/test_cpi.py, Lib/dos-8x3/test_bsd.py, Lib/dos-8x3/posixfil.py, Lib/dos-8x3/mimetype.py, Lib/dos-8x3/nturl2pa.py, Lib/dos-8x3/compilea.py, Lib/dos-8x3/exceptio.py, Lib/dos-8x3/basehttp.py:
+	The usual
+
+	* Include/patchlevel.h: Release 1.5.2c1
+
+	* README: Release 1.5.2c1.
+
+	* Misc/NEWS: News for the 1.5.2c1 release.
+
+	* Lib/test/test_strftime.py:
+	On Windows, we suddenly find, strftime() may return "" for an
+	unsupported format string.  (I guess this is because the logic for
+	deciding whether to reallocate the buffer or not has been improved.)
+	This caused the test code to crash on result[0].  Fix this by assuming
+	an empty result also means the format is not supported.
+
+	* Demo/tkinter/matt/window-creation-w-location.py:
+	This demo imported some private code from Matt.  Make it cripple along.
+
+	* Lib/lib-tk/Tkinter.py:
+	Delete an accidentally checked-in feature that actually broke more
+	than was worth it: when deleting a canvas item, it would try to
+	automatically delete the bindings for that item.  Since there's
+	nothing that says you can't reuse the tag and still have the bindings,
+	this is not correct.  Also, it broke at least one demo
+	(Demo/tkinter/matt/rubber-band-box-demo-1.py).
+
+	* Python/thread_wince.h: Win/CE thread support by Mark Hammond.
+
+Wed Apr  7 20:23:17 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Modules/zlibmodule.c:
+	Patch by Andrew Kuchling to unflush() (flush() for deflating).
+	Without this, if inflate() returned Z_BUF_ERROR asking for more output
+	space, we would report the error; now, we increase the buffer size and
+	try again, just as for Z_OK.
+
+	* Lib/test/test_gzip.py: Use binary mode for all gzip files we open.
+
+	* Tools/idle/ChangeLog: New change log.
+
+	* Tools/idle/README.txt, Tools/idle/NEWS.txt: New version.
+
+	* Python/pythonrun.c:
+	Alas, get rid of the Win specific hack to ask the user to press Return
+	before exiting when an error happened.  This didn't work right when
+	Python is invoked from a daemon.
+
+	* Tools/idle/idlever.py: Version bump awaiting impending new release.
+	(Not much has changed :-( )
+
+	* Lib/lib-tk/Tkinter.py:
+	lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift,
+	so the preferred name for them is tag_lower, tag_raise
+	(similar to tag_bind, and similar to the Text widget);
+	unfortunately can't delete the old ones yet (maybe in 1.6)
+
+	* Python/thread.c, Python/strtod.c, Python/mystrtoul.c, Python/import.c, Python/ceval.c:
+	Changes by Mark Hammond for Windows CE.  Mostly of the form
+	  #ifdef DONT_HAVE_header_H ... #endif around #include <header.h>.
+
+	* Python/bltinmodule.c:
+	Remove unused variable from complex_from_string() code.
+
+	* Include/patchlevel.h:
+	Add the possibility of a gamma release (release candidate).
+	Add '+' to string version number to indicate we're beyond b2 now.
+
+	* Modules/posixmodule.c: Add extern decl for fsync() for SunOS 4.x.
+
+	* Lib/smtplib.py: Changes by Per Cederquist and The Dragon.
+
+	Per writes:
+
+	"""
+	The application where Signum Support uses smtplib needs to be able to
+	report good error messages to the user when sending email fails.  To
+	help in diagnosing problems it is useful to be able to report the
+	entire message sent by the server, not only the SMTP error code of the
+	offending command.
+
+	A lot of the functions in sendmail.py unfortunately discards the
+	message, leaving only the code.  The enclosed patch fixes that
+	problem.
+
+	The enclosed patch also introduces a base class for exceptions that
+	include an SMTP error code and error message, and make the code and
+	message available on separate attributes, so that surrounding code can
+	deal with them in whatever way it sees fit.  I've also added some
+	documentation to the exception classes.
+
+	The constructor will now raise an exception if it cannot connect to
+	the SMTP server.
+
+	The data() method will raise an SMTPDataError if it doesn't receive
+	the expected 354 code in the middle of the exchange.
+
+	According to section 5.2.10 of RFC 1123 a smtp client must accept "any
+	text, including no text at all" after the error code.  If the response
+	of a HELO command contains no text self.helo_resp will be set to the
+	empty string ("").  The patch fixes the test in the sendmail() method
+	so that helo_resp is tested against None; if it has the empty string
+	as value the sendmail() method would invoke the helo() method again.
+
+	The code no longer accepts a -1 reply from the ehlo() method in
+	sendmail().
+
+	[Text about removing SMTPRecipientsRefused deleted --GvR]
+	"""
+
+	and also:
+
+	"""
+	smtplib.py appends an extra blank line to the outgoing mail if the
+	`msg' argument to the sendmail method already contains a trailing
+	newline.  This patch should fix the problem.
+	"""
+
+	The Dragon writes:
+
+	"""
+		Mostly I just re-added the SMTPRecipientsRefused exception
+	(the exeption object now has the appropriate info in it ) [Per had
+	removed this in his patch --GvR] and tweaked the behavior of the
+	sendmail method whence it throws the newly added SMTPHeloException (it
+	was closing the connection, which it shouldn't.  whatever catches the
+	exception should do that. )
+
+		I pondered the change of the return values to tuples all around,
+	and after some thinking I decided that regularizing the return values was
+	too much of the Right Thing (tm) to not do.
+
+		My one concern is that code expecting an integer & getting a tuple
+	may fail silently.
+
+	(i.e. if it's doing :
+
+	      x.somemethod() >= 400:
+	expecting an integer, the expression will always be true if it gets a
+	tuple instead. )
+
+		However, most smtplib code I've seen only really uses the
+	sendmail() method, so this wouldn't bother it.  Usually code I've seen
+	that calls the other methods usually only calls helo() and ehlo() for
+	doing ESMTP, a feature which was not in the smtplib included with 1.5.1,
+	and thus I would think not much code uses it yet.
+	"""
+
+Tue Apr  6 19:38:18 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/test/test_ntpath.py:
+	Fix the tests now that splitdrive() no longer treats UNC paths special.
+	(Some tests converted to splitunc() tests.)
+
+	* Lib/ntpath.py:
+	Withdraw the UNC support from splitdrive().  Instead, a new function
+	splitunc() parses UNC paths.  The contributor of the UNC parsing in
+	splitdrive() doesn't like it, but I haven't heard a good reason to
+	keep it, and it causes some problems.  (I think there's a
+	philosophical problem -- to me, the split*() functions are purely
+	syntactical, and the fact that \\foo is not a valid path doesn't mean
+	that it shouldn't be considered an absolute path.)
+
+	Also (quite separately, but strangely related to the philosophical
+	issue above) fix abspath() so that if win32api exists, it doesn't fail
+	when the path doesn't actually exist -- if GetFullPathName() fails,
+	fall back on the old strategy (join with getcwd() if neccessary, and
+	then use normpath()).
+
+	* configure.in, configure, config.h.in, acconfig.h:
+	For BeOS PowerPC.  Chris Herborth.
+
+Mon Apr  5 21:54:14 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Modules/timemodule.c:
+	Jonathan Giddy notes, and Chris Lawrence agrees, that some comments on
+	#else/#endif are wrong, and that #if HAVE_TM_ZONE should be #ifdef.
+
+	* Misc/ACKS:
+	Bunch of new contributors, including 9 who contributed to the Docs,
+	reported by Fred.
+
+Mon Apr  5 18:37:59 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Lib/gzip.py:
+	Oops, missed mode parameter to open().
+
+	* Lib/gzip.py:
+	Made the default mode 'rb' instead of 'r', for better cross-platform
+	support.  (Based on comment on the documentation by Bernhard Reiter
+	<bernhard@csd.uwm.edu>).
+
+Fri Apr  2 22:18:25 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Tools/scripts/dutree.py:
+	For reasons I dare not explain, this script should always execute
+	main() when imported (in other words, it is not usable as a module).
+
+Thu Apr  1 15:32:30 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/test/test_cpickle.py: Jonathan Giddy write:
+
+	In test_cpickle.py, the module os got imported, but the line to remove
+	the temp file has gone missing.
+
+Tue Mar 30 20:17:31 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/BaseHTTPServer.py: Per Cederqvist writes:
+
+	If you send something like "PUT / HTTP/1.0" to something derived from
+	BaseHTTPServer that doesn't define do_PUT, you will get a response
+	that begins like this:
+
+		HTTP/1.0 501 Unsupported method ('do_PUT')
+		Server: SimpleHTTP/0.3 Python/1.5
+		Date: Tue, 30 Mar 1999 18:53:53 GMT
+
+	The server should complain about 'PUT' instead of 'do_PUT'.  This
+	patch should fix the problem.
+
+Mon Mar 29 20:33:21 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/smtplib.py: Patch by Per Cederqvist, who writes:
+
+	"""
+	 - It needlessly used the makefile() method for each response that is
+	   read from the SMTP server.
+
+	 - If the remote SMTP server closes the connection unexpectedly the
+	   code raised an IndexError.  It now raises an SMTPServerDisconnected
+	   exception instead.
+
+	 - The code now checks that all lines in a multiline response actually
+	   contains an error code.
+	"""
+
+	The Dragon approves.
+
+Mon Mar 29 20:25:40 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Lib/compileall.py:
+	When run as a script, report failures in the exit code as well.
+	Patch largely based on changes by Andrew Dalke, as discussed in the
+	distutils-sig.
+
+Mon Mar 29 20:23:41 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/urllib.py:
+	Hack so that if a 302 or 301 redirect contains a relative URL, the
+	right thing "just happens" (basejoin() with old URL).
+
+	* Modules/cPickle.c:
+	Protection against picling to/from closed (real) file.
+	The problem was reported by Moshe Zadka.
+
+	* Lib/test/test_cpickle.py:
+	Test protection against picling to/from closed (real) file.
+
+	* Modules/timemodule.c: Chris Lawrence writes:
+
+	"""
+	The GNU folks, in their infinite wisdom, have decided not to implement
+	altzone in libc6; this would not be horrible, except that timezone
+	(which is implemented) includes the current DST setting (i.e. timezone
+	for Central is 18000 in summer and 21600 in winter).  So Python's
+	timezone and altzone variables aren't set correctly during DST.
+
+	Here's a patch relative to 1.5.2b2 that (a) makes timezone and altzone
+	show the "right" thing on Linux (by using the tm_gmtoff stuff
+	available in BSD, which is how the GLIBC manual claims things should
+	be done) and (b) should cope with the southern hemisphere.  In pursuit
+	of (b), I also took the liberty of renaming the "summer" and "winter"
+	variables to "july" and "jan".  This patch should also make certain
+	time calculations on Linux actually work right (like the tz-aware
+	functions in the rfc822 module).
+
+	(It's hard to find DST that's currently being used in the southern
+	hemisphere; I tested using Africa/Windhoek.)
+	"""
+
+	* Lib/test/output/test_gzip:
+	Jonathan Giddy discovered this file was missing.
+
+	* Modules/shamodule.c:
+	Avoid warnings from AIX compiler.  Reported by Vladimir (AIX is my
+	middlename) Marangozov, patch coded by Greg Stein.
+
+	* Tools/idle/ScriptBinding.py, Tools/idle/PyShell.py:
+	At Tim Peters' recommendation, add a dummy flush() method to PseudoFile.
+
+Sun Mar 28 17:55:32 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Tools/scripts/ndiff.py: Tim Peters writes:
+
+	I should have waited overnight <wink/sigh>.  Nothing wrong with the one I
+	sent, but I couldn't resist going on to add new -r1 / -r2 cmdline options
+	for recreating the original files from ndiff's output.  That's attached, if
+	you're game!  Us Windows guys don't usually have a sed sitting around
+	<wink>.
+
+Sat Mar 27 13:34:01 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Tools/scripts/ndiff.py: Tim Peters writes:
+
+	Attached is a cleaned-up version of ndiff (added useful module
+	docstring, now echo'ed in case of cmd line mistake); added -q option
+	to suppress initial file identification lines; + other minor cleanups,
+	& a slightly faster match engine.
+
+Fri Mar 26 22:36:00 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Tools/scripts/dutree.py:
+	During display, if EPIPE is raised, it's probably because a pager was
+	killed.  Discard the error in that case, but propogate it otherwise.
+
+Fri Mar 26 16:20:45 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/test/output/test_userlist, Lib/test/test_userlist.py:
+	Test suite for UserList.
+
+	* Lib/UserList.py: Use isinstance() where appropriate.
+	Reformatted with 4-space indent.
+
+Fri Mar 26 16:11:40 1999  Barry Warsaw  <bwarsaw@eric.cnri.reston.va.us>
+
+	* Tools/pynche/PyncheWidget.py:
+	Helpwin.__init__(): The text widget should get focus.
+
+	* Tools/pynche/pyColorChooser.py:
+	Removed unnecessary import `from PyncheWidget import PyncheWidget'
+
+Fri Mar 26 15:32:05 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/test/output/test_userdict, Lib/test/test_userdict.py:
+	Test suite for UserDict
+
+	* Lib/UserDict.py: Improved a bunch of things.
+	The constructor now takes an optional dictionary.
+	Use isinstance() where appropriate.
+
+Thu Mar 25 22:38:49 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/test/output/test_pickle, Lib/test/output/test_cpickle, Lib/test/test_pickle.py, Lib/test/test_cpickle.py:
+	Basic regr tests for pickle/cPickle
+
+	* Lib/pickle.py:
+	Don't use "exec" in find_class().  It's slow, unnecessary, and (as AMK
+	points out) it doesn't work in JPython Applets.
+
+Thu Mar 25 21:50:27 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>
+
+	* Lib/test/test_gzip.py:
+	Added a simple test suite for gzip.  It simply opens a temp file,
+	writes a chunk of compressed data, closes it, writes another chunk, and
+	reads the contents back to verify that they are the same.
+
+	* Lib/gzip.py:
+	Based on a suggestion from bruce@hams.com, make a trivial change to
+	allow using the 'a' flag as a mode for opening a GzipFile.  gzip
+	files, surprisingly enough, can be concatenated and then decompressed;
+	the effect is to concatenate the two chunks of data.
+
+	If we support it on writing, it should also be supported on reading.
+	This *wasn't* trivial, and required rearranging the code in the
+	reading path, particularly the _read() method.
+
+	Raise IOError instead of RuntimeError in two cases, 'Not a gzipped file'
+	and 'Unknown compression method'
+
+Thu Mar 25 21:25:01 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/test/test_b1.py:
+	Add tests for float() and complex() with string args (Nick/Stephanie
+	Lockwood).
+
+Thu Mar 25 21:21:08 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>
+
+	* Modules/zlibmodule.c:
+	Add an .unused_data attribute to decompressor objects.  If .unused_data
+	is not an empty string, this means that you have arrived at the
+	end of the stream of compressed data, and the contents of .unused_data are
+	whatever follows the compressed stream.
+
+Thu Mar 25 21:16:07 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Python/bltinmodule.c:
+	Patch by Nick and Stephanie Lockwood to implement complex() with a string
+	argument.  This closes TODO item 2.19.
+
+Wed Mar 24 19:09:00 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Tools/webchecker/wcnew.py: Added Samuel Bayer's new webchecker.
+	Unfortunately his code breaks wcgui.py in a way that's not easy
+	to fix.  I expect that this is a temporary situation --
+	eventually Sam's changes will be merged back in.
+	(The changes add a -t option to specify exceptions to the -x
+	option, and explicit checking for #foo style fragment ids.)
+
+	* Objects/dictobject.c:
+	Vladimir Marangozov contributed updated comments.
+
+	* Objects/bufferobject.c: Folded long lines.
+
+	* Lib/test/output/test_sha, Lib/test/test_sha.py:
+	Added Jeremy's test code for the sha module.
+
+	* Modules/shamodule.c, Modules/Setup.in:
+	Added Greg Stein and Andrew Kuchling's sha module.
+	Fix comments about zlib version and URL.
+
+	* Lib/test/test_bsddb.py: Remove the temp file when we're done.
+
+	* Include/pythread.h: Conform to standard boilerplate.
+
+	* configure.in, configure, BeOS/linkmodule, BeOS/ar-fake:
+	Chris Herborth: the new compiler in R4.1 needs some new options to work...
+
+	* Modules/socketmodule.c:
+	Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the
+	data struct before calling gethostby{name,addr}_r(); (2) ignore the
+	3/5/6 args determinations made by the configure script and switch on
+	platform identifiers instead:
+
+	AIX, OSF have 3 args
+	Sun, SGI have 5 args
+	Linux has 6 args
+
+	On all other platforms, undef HAVE_GETHOSTBYNAME_R altogether.
+
+	* Modules/socketmodule.c:
+	Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code.
+
+	* Lib/mailbox.py:
+	Add readlines() to _Subfile class.  Not clear who would need it, but
+	Chris Lawrence sent me a broken version; this one is a tad simpler and
+	more conforming to the standard.
+
+Tue Mar 23 23:05:34 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>
+
+	* Lib/gzip.py: use struct instead of bit-manipulate in Python
+
+Tue Mar 23 19:00:55 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Modules/Makefile.pre.in:
+	Add $(EXE) to various occurrences of python so it will work on Cygwin
+	with egcs (after setting EXE=.exe).  Patch by Norman Vine.
+
+	* configure, configure.in:
+	Ack!  It never defined HAVE_GETHOSTBYNAME_R so that code was never tested!
+
+Mon Mar 22 22:25:39 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Include/thread.h:
+	Adding thread.h -- unused but for b/w compatibility.
+	As requested by Bill Janssen.
+
+	* configure.in, configure:
+	Add code to test for all sorts of gethostbyname_r variants,
+	donated by David Arnold.
+
+	* config.h.in, acconfig.h:
+	Add symbols for gethostbyname_r variants (sigh).
+
+	* Modules/socketmodule.c: Clean up pass for the previous patches.
+
+	- Use HAVE_GETHOSTBYNAME_R_6_ARG instead of testing for Linux and
+	glibc2.
+
+	- If gethostbyname takes 3 args, undefine HAVE_GETHOSTBYNAME_R --
+	don't know what code should be used.
+
+	- New symbol USE_GETHOSTBYNAME_LOCK defined iff the lock should be used.
+
+	- Modify the gethostbyaddr() code to also hold on to the lock until
+	after it is safe to release, overlapping with the Python lock.
+
+	(Note: I think that it could in theory be possible that Python code
+	executed while gethostbyname_lock is held could attempt to reacquire
+	the lock -- e.g. in a signal handler or destructor.  I will simply say
+	"don't do that then.")
+
+	* Modules/socketmodule.c: Jonathan Giddy writes:
+
+	Here's a patch to fix the race condition, which wasn't fixed by Rob's
+	patch.  It holds the gethostbyname lock until the results are copied out,
+	which means that this lock and the Python global lock are held at the same
+	time.  This shouldn't be a problem as long as the gethostbyname lock is
+	always acquired when the global lock is not held.
+
+Mon Mar 22 19:25:30 1999  Andrew Kuchling  <akuchlin@eric.cnri.reston.va.us>
+
+	* Modules/zlibmodule.c:
+	Fixed the flush() method of compression objects; the test for
+	    the end of loop was incorrect, and failed when the flushmode != Z_FINISH.
+	    Logic cleaned up and commented.
+
+	* Lib/test/test_zlib.py:
+	Added simple test for the flush() method of compression objects, trying the
+	    different flush values Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH.
+
+Mon Mar 22 15:28:08 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/shlex.py:
+	Bug reported by Tobias Thelen: missing "self." in assignment target.
+
+Fri Mar 19 21:50:11 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Modules/arraymodule.c:
+	Use an unsigned cast to avoid a warning in VC++.
+
+	* Lib/dospath.py, Lib/ntpath.py:
+	New code for split() by Tim Peters, behaves more like posixpath.split().
+
+	* Objects/floatobject.c:
+	Fix a problem with Vladimir's PyFloat_Fini code: clear the free list; if
+	a block cannot be freed, add its free items back to the free list.
+	This is necessary to avoid leaking when Python is reinitialized later.
+
+	* Objects/intobject.c:
+	Fix a problem with Vladimir's PyInt_Fini code: clear the free list; if
+	a block cannot be freed, add its free items back to the free list, and
+	add its valid ints back to the small_ints array if they are in range.
+	This is necessary to avoid leaking when Python is reinitialized later.
+
+	* Lib/types.py:
+	Added BufferType, the type returned by the new builtin buffer().  Greg Stein.
+
+	* Python/bltinmodule.c:
+	New builtin buffer() creates a derived read-only buffer from any
+	object that supports the buffer interface (e.g. strings, arrays).
+
+	* Objects/bufferobject.c:
+	Added check for negative offset for PyBuffer_FromObject and check for
+	negative size for PyBuffer_FromMemory.  Greg Stein.
+
+Thu Mar 18 15:10:44 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/urlparse.py: Sjoerd Mullender writes:
+
+	If a filename on Windows starts with \\, it is converted to a URL
+	which starts with ////.  If this URL is passed to urlparse.urlparse
+	you get a path that starts with // (and an empty netloc).  If you pass
+	the result back to urlparse.urlunparse, you get a URL that starts with
+	//, which is parsed differently by urlparse.urlparse.  The fix is to
+	add the (empty) netloc with accompanying slashes if the path in
+	urlunparse starts with //.  Do this for all schemes that use a netloc.
+
+	* Lib/nturl2path.py: Sjoerd Mullender writes:
+
+	Pathnames of files on other hosts in the same domain
+	(\\host\path\to\file) are not translated correctly to URLs and back.
+	The URL should be something like file:////host/path/to/file.
+	Note that a combination of drive letter and remote host is not
+	possible.
+
+Wed Mar 17 22:30:10 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/urlparse.py:
+	Delete non-standard-conforming code in urljoin() that would use the
+	netloc from the base url as the default netloc for the resulting url
+	even if the schemes differ.
+
+	Once upon a time, when the web was wild, this was a valuable hack
+	because some people had a URL referencing an ftp server colocated with
+	an http server without having the host in the ftp URL (so they could
+	replicate it or change the hostname easily).
+
+	More recently, after the file: scheme got added back to the list of
+	schemes that accept a netloc, it turns out that this caused weirdness
+	when joining an http: URL with a file: URL -- the resulting file: URL
+	would always inherit the host from the http: URL because the file:
+	scheme supports a netloc but in practice never has one.
+
+	There are two reasons to get rid of the old, once-valuable hack,
+	instead of removing the file: scheme from the uses_netloc list.  One,
+	the RFC says that file: uses the netloc syntax, and does not endorse
+	the old hack.  Two, neither netscape 4.5 nor IE 4.0 support the old
+	hack.
+
+	* Include/ceval.h, Include/abstract.h:
+	Add DLL level b/w compat for PySequence_In and PyEval_CallObject
+
+Tue Mar 16 21:54:50 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/lib-tk/Tkinter.py: Bug reported by Jim Robinson:
+
+	An attempt to execute grid_slaves with arguments (0,0) results in
+	*all* of the slaves being returned, not just the slave associated with
+	row 0, column 0.  This is because the test for arguments in the method
+	does not test to see if row (and column) does not equal None, but
+	rather just whether is evaluates to non-false.  A value of 0 fails
+	this test.
+
+Tue Mar 16 14:17:48 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Modules/cmathmodule.c:
+	Docstring fix:  acosh() returns the hyperbolic arccosine, not the
+	hyperbolic cosine.  Problem report via David Ascher by one of his
+	students.
+
+Mon Mar 15 21:40:59 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* configure.in:
+	Should test for gethost*by*name_r, not for gethostname_r (which
+	doesn't exist and doesn't make sense).
+
+	* Modules/socketmodule.c:
+	Patch by Rob Riggs for Linux -- glibc2 has a different argument
+	converntion for gethostbyname_r() etc. than Solaris!
+
+	* Python/thread_pthread.h: Rob Riggs wrote:
+
+	"""
+	Spec says that on success pthread_create returns 0. It does not say
+	that an error code will be < 0. Linux glibc2 pthread_create() returns
+	ENOMEM (12) when one exceed process limits. (It looks like it should
+	return EAGAIN, but that's another story.)
+
+	For reference, see:
+	http://www.opengroup.org/onlinepubs/7908799/xsh/pthread_create.html
+	"""
+
+	[I have a feeling that similar bugs were fixed before; perhaps someone
+	could check that all error checks no check for != 0?]
+
+	* Tools/bgen/bgen/bgenObjectDefinition.py:
+	New mixin class that defines cmp and hash that use
+	the ob_itself pointer.  This allows (when using the mixin)
+	different Python objects pointing to the same C object and
+	behaving well as dictionary keys.
+
+	Or so sez Jack Jansen...
+
+	* Lib/urllib.py: Yet another patch by Sjoerd Mullender:
+
+	Don't convert URLs to URLs using pathname2url.
+
+Fri Mar 12 22:15:43 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/cmd.py: Patch by Michael Scharf.  He writes:
+
+	    The module cmd requires for each do_xxx command a help_xxx
+	    function. I think this is a little old fashioned.
+
+	    Here is a patch: use the docstring as help if no help_xxx
+	    function can be found.
+
+	[I'm tempted to rip out all the help_* functions from pdb, but I'll
+	resist it.  Any takers?  --Guido]
+
+	* Tools/freeze/freeze.py: Bug submitted by Wayne Knowles, who writes:
+
+	   Under Windows, python freeze.py -o hello hello.py
+	   creates all the correct files in the hello subdirectory, but the
+	   Makefile has the directory prefix in it for frozen_extensions.c
+	   nmake fails because it tries to locate hello/frozen_extensions.c
+
+	(His fix adds a call to os.path.basename() in the appropriate place.)
+
+	* Objects/floatobject.c, Objects/intobject.c:
+	Vladimir has restructured his code somewhat so that the blocks are now
+	represented by an explicit structure.  (There are still too many casts
+	in the code, but that may be unavoidable.)
+
+	Also added code so that with -vv it is very chatty about what it does.
+
+	* Demo/zlib/zlibdemo.py, Demo/zlib/minigzip.py:
+	Change #! line to modern usage; also chmod +x
+
+	* Demo/pdist/rrcs, Demo/pdist/rcvs, Demo/pdist/rcsbump:
+	Change #! line to modern usage
+
+	* Lib/nturl2path.py, Lib/urllib.py: From: Sjoerd Mullender
+
+	The filename to URL conversion didn't properly quote special
+	characters.
+	The URL to filename didn't properly unquote special chatacters.
+
+	* Objects/floatobject.c:
+	OK, try again.  Vladimir gave me a fix for the alignment bus error,
+	so here's his patch again.  This time it works (at least on Solaris,
+	Linux and Irix).
+
+Thu Mar 11 23:21:23 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Tools/idle/PathBrowser.py:
+	Don't crash when sys.path contains an empty string.
+
+	* Tools/idle/PathBrowser.py:
+	- Don't crash in the case where a superclass is a string instead of a
+	pyclbr.Class object; this can happen when the superclass is
+	unrecognizable (to pyclbr), e.g. when module renaming is used.
+
+	- Show a watch cursor when calling pyclbr (since it may take a while
+	recursively parsing imported modules!).
+
+Thu Mar 11 16:04:04 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Lib/mimetypes.py:
+	Added .rdf and .xsl as application/xml types.  (.rdf is for the
+	Resource Description Framework, a metadata encoding, and .xsl is for
+	the Extensible Stylesheet Language.)
+
+Thu Mar 11 13:26:23 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/test/output/test_popen2, Lib/test/test_popen2.py:
+	Test for popen2 module, by Chris Tismer.
+
+	* Objects/floatobject.c:
+	Alas, Vladimir's patch caused a bus error (probably double
+	alignment?), and I didn't test it.  Withdrawing it for now.
+
+Wed Mar 10 22:55:47 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Objects/floatobject.c:
+	Patch by Vladimir Marangoz to allow freeing of the allocated blocks of
+	floats on finalization.
+
+	* Objects/intobject.c:
+	Patch by Vladimir Marangoz to allow freeing of the allocated blocks of
+	integers on finalization.
+
+	* Tools/idle/EditorWindow.py, Tools/idle/Bindings.py:
+	Add PathBrowser to File module
+
+	* Tools/idle/PathBrowser.py:
+	"Path browser" - 4 scrolled lists displaying:
+	    directories on sys.path
+	    modules in selected directory
+	    classes in selected module
+	    methods of selected class
+
+	Sinlge clicking in a directory, module or class item updates the next
+	column with info about the selected item.  Double clicking in a
+	module, class or method item opens the file (and selects the clicked
+	item if it is a class or method).
+
+	I guess eventually I should be using a tree widget for this, but the
+	ones I've seen don't work well enough, so for now I use the old
+	Smalltalk or NeXT style multi-column hierarchical browser.
+
+	* Tools/idle/MultiScrolledLists.py:
+	New utility: multiple scrolled lists in parallel
+
+	* Tools/idle/ScrolledList.py: - White background.
+	- Display "(None)" (or text of your choosing) when empty.
+	- Don't set the focus.
+
+Tue Mar  9 19:31:21 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/urllib.py:
+	open_http also had the 'data is None' test backwards.  don't call with the
+	extra argument if data is None.
+
+	* Demo/embed/demo.c:
+	Call Py_SetProgramName() instead of redefining getprogramname(),
+	reflecting changes in the runtime around 1.5 or earlier.
+
+	* Python/ceval.c:
+	Always test for an error return (usually NULL or -1) without setting
+	an exception.
+
+	* Modules/timemodule.c: Patch by Chris Herborth for BeOS code.
+	He writes:
+
+	I had an off-by-1000 error in floatsleep(),
+	and the problem with time.clock() is that it's not implemented properly
+	on QNX... ANSI says it's supposed to return _CPU_ time used by the
+	process, but on QNX it returns the amount of real time used... so I was
+	confused.
+
+	* Tools/bgen/bgen/macsupport.py: Small change by Jack Jansen.
+	Test for self.returntype behaving like OSErr rather than being it.
+
+Thu Feb 25 16:14:58 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>
+
+	* Lib/urllib.py:
+	http_error had the 'data is None' test backwards.  don't call with the
+	extra argument if data is None.
+
+	* Lib/urllib.py: change indentation from 8 spaces to 4 spaces
+
+	* Lib/urllib.py: pleasing the tabnanny
+
+Thu Feb 25 14:26:02 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Lib/colorsys.py:
+	Oops, one more "x, y, z" to convert...
+
+	* Lib/colorsys.py:
+	Adjusted comment at the top to be less confusing, following Fredrik
+	Lundh's example.
+
+	Converted comment to docstring.
+
+Wed Feb 24 18:49:15 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Lib/toaiff.py:
+	Use sndhdr instead of the obsolete whatsound module.
+
+Wed Feb 24 18:42:38 1999  Jeremy Hylton  <jhylton@eric.cnri.reston.va.us>
+
+	* Lib/urllib.py:
+	When performing a POST request, i.e. when the second argument to
+	urlopen is used to specify form data, make sure the second argument is
+	threaded through all of the http_error_NNN calls.  This allows error
+	handlers like the redirect and authorization handlers to properly
+	re-start the connection.
+
+Wed Feb 24 16:25:17 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/mhlib.py: Patch by Lars Wirzenius:
+
+		o the initial comment is wrong: creating messages is already
+		  implemented
+
+		o Message.getbodytext: if the mail or it's part contains an
+		  empty content-transfer-encoding header, the code used to
+		  break; the change below treats an empty encoding value the same
+		  as the other types that do not need decoding
+
+		o SubMessage.getbodytext was missing the decode argument; the
+		  change below adds it; I also made it unconditionally return
+		  the raw text if decoding was not desired, because my own
+		  routines needed that (and it was easier than rewriting my
+		  own routines ;-)
+
+Wed Feb 24 00:35:43 1999  Barry Warsaw  <bwarsaw@eric.cnri.reston.va.us>
+
+	* Python/bltinmodule.c (initerrors):
+	Make sure that the exception tuples ("base-classes" when
+	string-based exceptions are used) reflect the real class hierarchy,
+	i.e. that SystemExit derives from Exception not StandardError.
+
+	* Lib/exceptions.py:
+	Document the correct class hierarchy for SystemExit.  It is not an
+	error and so it derives from Exception and not SystemError.  The
+	docstring was incorrect but the implementation was fine.
+
+Tue Feb 23 23:07:51 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/shutil.py:
+	Add import sys, needed by reference to sys.exc_info() in rmtree().
+	Discovered by Mitch Chapman.
+
+	* config.h.in:
+	Now that we don't have AC_CHECK_LIB(m, pow), the HAVE_LIBM symbol
+	disappears.  It wasn't used anywhere anyway...
+
+	* Modules/arraymodule.c:
+	Carefully check for overflow when allocating the memory for fromfile
+	-- someone tried to pass in sys.maxint and got bitten by the bogus
+	calculations.
+
+	* configure.in:
+	Get rid of AC_CHECK_LIB(m, pow) since this is taken care of later with
+	LIBM (from --with-libm=...); this actually broke the customizability
+	offered by the latter option.  Thanks go to Clay Spence for reporting
+	this.
+
+	* Lib/test/test_dl.py:
+	1. Print the error message (carefully) when a dl.open() fails in verbose mode.
+	2. When no test case worked, raise ImportError instead of failing.
+
+	* Python/bltinmodule.c:
+	Patch by Tim Peters to improve the range checks for range() and
+	xrange(), especially for platforms where int and long are different
+	sizes (so sys.maxint isn't actually the theoretical limit for the
+	length of a list, but the largest C int is -- sys.maxint is the
+	largest Python int, which is actually a C long).
+
+	* Makefile.in:
+	1. Augment the DG/UX rule so it doesn't break the BeOS build.
+	2. Add $(EXE) to various occurrences of python so it will work on
+	   Cygwin with egcs (after setting EXE=.exe).  These patches by
+	   Norman Vine.
+
+	* Lib/posixfile.py:
+	According to Jeffrey Honig, bsd/os 2.0 - 4.0 should be added to the
+	list (of bsd variants that have a different lock structure).
+
+	* Lib/test/test_fcntl.py:
+	According to Jeffrey Honig, bsd/os 4.0 should be added to the list.
+
+	* Modules/timemodule.c:
+	Patch by Tadayoshi Funaba (with some changes) to be smarter about
+	guessing what happened when strftime() returns 0.  Is it buffer
+	overflow or was the result simply 0 bytes long?  (This happens for an
+	empty format string, or when the format string is a single %Z and the
+	timezone is unknown.)  if the buffer is at least 256 times as long as
+	the format, assume the latter.
+
+Mon Feb 22 19:01:42 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/urllib.py:
+	As Des Barry points out, we need to call pathname2url(file) in two
+	calls to addinfourl() in open_file().
+
+	* Modules/Setup.in: Document *static* -- in two places!
+
+	* Modules/timemodule.c:
+	We don't support leap seconds, so the seconds field of a time 9-tuple
+	should be in the range [0-59].  Noted by Tadayoshi Funaba.
+
+	* Modules/stropmodule.c:
+	In atoi(), don't use isxdigit() to test whether the last character
+	converted was a "digit" -- use isalnum().  This test is there only to
+	guard against "+" or "-" being interpreted as a valid int literal.
+	Reported by Takahiro Nakayama.
+
+	* Lib/os.py:
+	As Finn Bock points out, _P_WAIT etc. don't have a leading underscore
+	so they don't need to be treated specially here.
+
+Mon Feb 22 15:38:58 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Misc/NEWS:
+	Typo:  "apparentlt" --> "apparently"
+
+Mon Feb 22 15:38:46 1999  Guido van Rossum  <guido@eric.cnri.reston.va.us>
+
+	* Lib/urlparse.py: Steve Clift pointed out that 'file' allows a netloc.
+
+	* Modules/posixmodule.c:
+	The docstring for ttyname(..) claims a second "mode" argument. The
+	actual code does not allow such an argument.  (Finn Bock.)
+
+	* Lib/lib-old/poly.py:
+	Dang.  Even though this is obsolete code, somebody found a bug, and I
+	fix it.  Oh well.
+
+Thu Feb 18 20:51:50 1999  Fred Drake  <fdrake@eric.cnri.reston.va.us>
+
+	* Lib/pyclbr.py:
+	Bow to font-lock at the end of the docstring, since it throws stuff
+	off.
+
+	Make sure the path paramter to readmodule() is a list before adding it
+	with sys.path, or the addition could fail.
+
+
+======================================================================
+
+
+From 1.5.2b1 to 1.5.2b2
+=======================
+
+General
+-------
+
+- Many memory leaks fixed.
+
+- Many small bugs fixed.
+
+- Command line option -OO (or -O -O) suppresses inclusion of doc
+strings in resulting bytecode.
+
+Windows-specific changes
+------------------------
+
+- New built-in module winsound provides an interface to the Win32
+PlaySound() call.
+
+- Re-enable the audioop module in the config.c file.
+
+- On Windows, support spawnv() and associated P_* symbols.
+
+- Fixed the conversion of times() return values on Windows.
+
+- Removed freeze from the installer -- it doesn't work without the
+source tree.  (See FAQ 8.11.)
+
+- On Windows 95/98, the Tkinter module now is smart enough to find
+Tcl/Tk even when the PATH environment variable hasn't been set -- when
+the import of _tkinter fails, it searches in a standard locations,
+patches os.environ["PATH"], and tries again.  When it still fails, a
+clearer error message is produced.  This should avoid most
+installation problems with Tkinter use (e.g. in IDLE).
+
+- The -i option doesn't make any calls to set[v]buf() for stdin --
+this apparently screwed up _kbhit() and the _tkinter main loop.
+
+- The ntpath module (and hence, os.path on Windows) now parses out UNC
+paths (e.g. \\host\mountpoint\dir\file) as "drive letters", so that
+splitdrive() will \\host\mountpoint as the drive and \dir\file as the
+path.  ** EXPERIMENTAL **
+
+- Added a hack to the exit code so that if (1) the exit status is
+nonzero and (2) we think we have our own DOS box (i.e. we're not
+started from a command line shell), we print a message and wait for
+the user to hit a key before the DOS box is closed.
+
+- Updated the installer to WISE 5.0g.  Added a dialog warning about
+the imminent Tcl installation.  Added a dialog to specify the program
+group name in the start menu.  Upgraded the Tcl installer to Tcl
+8.0.4.
+
+Changes to intrinsics
+---------------------
+
+- The repr() or str() of a module object now shows the __file__
+attribute (i.e., the file which it was loaded), or the string
+"(built-in)" if there is no __file__ attribute.
+
+- The range() function now avoids overflow during its calculations (if
+at all possible).
+
+- New info string sys.hexversion, which is an integer encoding the
+version in hexadecimal.  In other words, hex(sys.hexversion) ==
+0x010502b2 for Python 1.5.2b2.
+
+New or improved ports
+---------------------
+
+- Support for Nextstep descendants (future Mac systems).
+
+- Improved BeOS support.
+
+- Support dynamic loading of shared libraries on NetBSD platforms that 
+use ELF (i.e., MIPS and Alpha systems).
+
+Configuration/build changes
+---------------------------
+
+- The Lib/test directory is no longer included in the default module
+search path (sys.path) -- "test" has been a package ever since 1.5.
+
+- Now using autoconf 2.13.
+
+New library modules
+-------------------
+
+- New library modules asyncore and asynchat: these form Sam Rushing's
+famous asynchronous socket library.  Sam has gracefully allowed me to
+incorporate these in the standard Python library.
+
+- New module statvfs contains indexing constants for [f]statvfs()
+return tuple.
+
+Changes to the library
+----------------------
+
+- The wave module (platform-independent support for Windows sound
+files) has been fixed to actually make it work.
+
+- The sunau module (platform-independent support for Sun/NeXT sound
+files) has been fixed to work across platforms.  Also, a weird
+encoding bug in the header of the audio test data file has been
+corrected.
+
+- Fix a bug in the urllib module that occasionally tripped up
+webchecker and other ftp retrieves.
+
+- ConfigParser's get() method now accepts an optional keyword argument
+(vars) that is substituted on top of the defaults that were setup in
+__init__.  You can now also have recusive references in your
+configuration file.
+
+- Some improvements to the Queue module, including a put_nowait()
+module and an optional "block" second argument, to get() and put(),
+defaulting to 1.
+
+- The updated xmllib module is once again compatible with the version
+present in Python 1.5.1 (this was accidentally broken in 1.5.2b1).
+
+- The bdb module (base class for the debugger) now supports
+canonicalizing pathnames used in breakpoints.  The derived class must
+override the new canonical() method for this to work.  Also changed
+clear_break() to the backwards compatible old signature, and added
+clear_bpbynumber() for the new functionality.
+
+- In sgmllib (and hence htmllib), recognize attributes even if they
+don't have space in front of them.  I.e.  '<a
+name="foo"href="bar.html">' will now have two attributes recognized.
+
+- In the debugger (pdb), change clear syntax to support three
+alternatives: clear; clear file:line; clear bpno bpno ...
+
+- The os.path module now pretends to be a submodule within the os
+"package", so you can do things like "from os.path import exists".
+
+- The standard exceptions now have doc strings.
+
+- In the smtplib module, exceptions are now classes.  Also avoid
+inserting a non-standard space after "TO" in rcpt() command.
+
+- The rfc822 module's getaddrlist() method now uses all occurrences of
+the specified header instead of just the first.  Some other bugfixes
+too (to handle more weird addresses found in a very large test set,
+and to avoid crashes on certain invalid dates), and a small test
+module has been added.
+
+- Fixed bug in urlparse in the common-case code for HTTP URLs; it
+would lose the query, fragment, and/or parameter information.
+
+- The sndhdr module no longer supports whatraw() -- it depended on a
+rare extenral program.
+
+- The UserList module/class now supports the extend() method, like
+real list objects.
+
+- The uu module now deals better with trailing garbage generated by
+some broke uuencoders.
+
+- The telnet module now has an my_interact() method which uses threads
+instead of select.  The interact() method uses this by default on
+Windows (where the single-threaded version doesn't work).
+
+- Add a class to mailbox.py for dealing with qmail directory
+mailboxes.  The test code was extended to notice these being used as
+well.
+
+Changes to extension modules
+----------------------------
+
+- Support for the [f]statvfs() system call, where it exists.
+
+- Fixed some bugs in cPickle where bad input could cause it to dump
+core.
+
+- Fixed cStringIO to make the writelines() function actually work.
+
+- Added strop.expandtabs() so string.expandtabs() is now much faster.
+
+- Added fsync() and fdatasync(), if they appear to exist.
+
+- Support for "long files" (64-bit seek pointers).
+
+- Fixed a bug in the zlib module's flush() function.
+
+- Added access() system call.  It returns 1 if access granted, 0 if
+not.
+
+- The curses module implements an optional nlines argument to
+w.scroll().  (It then calls wscrl(win, nlines) instead of scoll(win).)
+
+Changes to tools
+----------------
+
+- Some changes to IDLE; see Tools/idle/NEWS.txt.
+
+- Latest version of Misc/python-mode.el included.
+
+Changes to Tkinter
+------------------
+
+- Avoid tracebacks when an image is deleted after its root has been
+destroyed.
+
+Changes to the Python/C API
+---------------------------
+
+- When parentheses are used in a PyArg_Parse[Tuple]() call, any
+sequence is now accepted, instead of requiring a tuple.  This is in
+line with the general trend towards accepting arbitrary sequences.
+
+- Added PyModule_GetFilename().
+
+- In PyNumber_Power(), remove unneeded and even harmful test for float
+to the negative power (which is already and better done in
+floatobject.c).
+
+- New version identification symbols; read patchlevel.h for info.  The
+version numbers are now exported by Python.h.
+
+- Rolled back the API version change -- it's back to 1007!
+
+- The frozenmain.c function calls PyInitFrozenExtensions().
+
+- Added 'N' format character to Py_BuildValue -- like 'O' but doesn't
+INCREF.
+
+
+======================================================================
+
+
+From 1.5.2a2 to 1.5.2b1
+=======================
+
+Changes to intrinsics
+---------------------
+
+- New extension NotImplementedError, derived from RuntimeError.  Not
+used, but recommended use is for "abstract" methods to raise this.
+
+- The parser will now spit out a warning or error when -t or -tt is
+used for parser input coming from a string, too.
+
+- The code generator now inserts extra SET_LINENO opcodes when
+compiling multi-line argument lists.
+
+- When comparing bound methods, use identity test on the objects, not
+equality test.
+
+New or improved ports
+---------------------
+
+- Chris Herborth has redone his BeOS port; it now works on PowerPC
+(R3/R4) and x86 (R4 only).  Threads work too in this port.
+
+Renaming
+--------
+
+- Thanks to Chris Herborth, the thread primitives now have proper Py*
+names in the source code (they already had those for the linker,
+through some smart macros; but the source still had the old, un-Py
+names).
+
+Configuration/build changes
+---------------------------
+
+- Improved support for FreeBSD/3.
+
+- Check for pthread_detach instead of pthread_create in libc.
+
+- The makesetup script now searches EXECINCLUDEPY before INCLUDEPY.
+
+- Misc/Makefile.pre.in now also looks at Setup.thread and Setup.local.
+Otherwise modules such as thread didn't get incorporated in extensions.
+
+New library modules
+-------------------
+
+- shlex.py by Eric Raymond provides a lexical analyzer class for
+simple shell-like syntaxes.
+
+- netrc.py by Eric Raymond provides a parser for .netrc files.  (The
+undocumented Netrc class in ftplib.py is now obsolete.)
+
+- codeop.py is a new module that contains the compile_command()
+function that was previously in code.py.  This is so that JPython can
+provide its own version of this function, while still sharing the
+higher-level classes in code.py.
+
+- turtle.py is a new module for simple turtle graphics.  I'm still
+working on it; let me know if you use this to teach Python to children 
+or other novices without prior programming experience.
+
+Obsoleted library modules
+-------------------------
+
+- poly.py and zmod.py have been moved to Lib/lib-old to emphasize
+their status of obsoleteness.  They don't do a particularly good job
+and don't seem particularly relevant to the Python core.
+
+New tools
+---------
+
+- I've added IDLE: my Integrated DeveLopment Environment for Python.
+Requires Tcl/Tk (and Tkinter).  Works on Windows and Unix (and should
+work on Macintosh, but I haven't been able to test it there; it does
+depend on new features in 1.5.2 and perhaps even new features in
+1.5.2b1, especially the new code module).  This is very much a work in
+progress.  I'd like to hear how people like it compared to PTUI (or
+any other IDE they are familiar with).
+
+- New tools by Barry Warsaw:
+
+  = audiopy: controls the Solaris Audio device
+  = pynche:  The PYthonically Natural Color and Hue Editor
+  = world:   Print mappings between country names and DNS country codes
+
+New demos
+---------
+
+- Demo/scripts/beer.py prints the lyrics to an arithmetic drinking
+song.
+
+- Demo/tkinter/guido/optionmenu.py shows how to do an option menu in
+Tkinter.  (By Fredrik Lundh -- not by me!)
+
+Changes to the library
+----------------------
+
+- compileall.py now avoids recompiling .py files that haven't changed;
+it adds a -f option to force recompilation.
+
+- New version of xmllib.py by Sjoerd Mullender (0.2 with latest
+patches).
+
+- nntplib.py: statparse() no longer lowercases the message-id.
+
+- types.py: use type(__stdin__) for FileType.
+
+- urllib.py: fix translations for filenames with "funny" characters.
+Patch by Sjoerd Mullender.  Note that if you subclass one of the
+URLopener classes, and you have copied code from the old urllib.py,
+your subclass may stop working.  A long-term solution is to provide
+more methods so that you don't have to copy code.
+
+- cgi.py: In read_multi, allow a subclass to override the class we
+instantiate when we create a recursive instance, by setting the class
+variable 'FieldStorageClass' to the desired class.  By default, this
+is set to None, in which case we use self.__class__ (as before).
+Also, a patch by Jim Fulton to pass additional arguments to recursive
+calls to the FieldStorage constructor from its read_multi method.
+
+- UserList.py: In __getslice__, use self.__class__ instead of
+UserList.
+
+- In SimpleHTTPServer.py, the server specified in test() should be
+BaseHTTPServer.HTTPServer, in case the request handler should want to
+reference the two attributes added by BaseHTTPServer.server_bind.  (By
+Jeff Rush, for Bobo).  Also open the file in binary mode, so serving
+images from a Windows box might actually work.
+
+- In CGIHTTPServer.py, the list of acceptable formats is -split-
+on spaces but -joined- on commas, resulting in double commas
+in the joined text.  (By Jeff Rush.)
+
+- SocketServer.py, patch by Jeff Bauer: a minor change to declare two
+new threaded versions of Unix Server classes, using the ThreadingMixIn
+class: ThreadingUnixStreamServer, ThreadingUnixDatagramServer.
+
+- bdb.py: fix bomb on deleting a temporary breakpoint: there's no
+method do_delete(); do_clear() was meant.  By Greg Ward.
+
+- getopt.py: accept a non-list sequence for the long options (request
+by Jack Jansen).  Because it might be a common mistake to pass a
+single string, this situation is treated separately.  Also added
+docstrings (copied from the library manual) and removed the (now
+redundant) module comments.
+
+- tempfile.py: improvements to avoid security leaks.
+
+- code.py: moved compile_command() to new module codeop.py.
+
+- pickle.py: support pickle format 1.3 (binary float added).  By Jim
+Fulton. Also get rid of the undocumented obsolete Pickler dump_special
+method.
+
+- uu.py: Move 'import sys' to top of module, as noted by Tim Peters.
+
+- imaplib.py: fix problem with some versions of IMAP4 servers that
+choose to mix the case in their CAPABILITIES response.
+
+- cmp.py: use (f1, f2) as cache key instead of f1 + ' ' + f2.  Noted
+by Fredrik Lundh.
+
+Changes to extension modules
+----------------------------
+
+- More doc strings for several modules were contributed by Chris
+Petrilli: math, cmath, fcntl.
+
+- Fixed a bug in zlibmodule.c that could cause core dumps on
+decompression of rarely occurring input.
+
+- cPickle.c: new version from Jim Fulton, with Open Source copyright
+notice.  Also, initialize self->safe_constructors early on to prevent
+crash in early dealloc.
+
+- cStringIO.c: new version from Jim Fulton, with Open Source copyright
+notice.  Also fixed a core dump in cStringIO.c when doing seeks.
+
+- mpzmodule.c: fix signed character usage in mpz.mpz(stringobjecty).
+
+- readline.c: Bernard Herzog pointed out that rl_parse_and_bind
+modifies its argument string (bad function!), so we make a temporary
+copy.
+
+- sunaudiodev.c: Barry Warsaw added more smarts to get the device and
+control pseudo-device, per audio(7I).
+
+Changes to tools
+----------------
+
+- New, improved version of Barry Warsaw's Misc/python-mode.el (editing 
+support for Emacs).
+
+- tabnanny.py: added a -q ('quiet') option to tabnanny, which causes
+only the names of offending files to be printed.
+
+- freeze: when printing missing modules, also print the module they
+were imported from.
+
+- untabify.py: patch by Detlef Lannert to implement -t option
+(set tab size).
+
+Changes to Tkinter
+------------------
+
+- grid_bbox(): support new Tk API: grid bbox ?column row? ?column2
+row2?
+
+- _tkinter.c: RajGopal Srinivasan noted that the latest code (1.5.2a2)
+doesn't work when running in a non-threaded environment.  He added
+some #ifdefs that fix this.
+
+Changes to the Python/C API
+---------------------------
+
+- Bumped API version number to 1008 -- enough things have changed!
+
+- There's a new macro, PyThreadState_GET(), which does the same work
+as PyThreadState_Get() without the overhead of a function call (it
+also avoids the error check).  The two top calling locations of
+PyThreadState_Get() have been changed to use this macro.
+
+- All symbols intended for export from a DLL or shared library are now
+marked as such (with the DL_IMPORT() macro) in the header file that
+declares them.  This was needed for the BeOS port, and should also
+make some other ports easier.  The PC port no longer needs the file
+with exported symbols (PC/python_nt.def).  There's also a DL_EXPORT
+macro which is only used for init methods in extension modules, and
+for Py_Main().
+
+Invisible changes to internals
+------------------------------
+
+- Fixed a bug in new_buffersize() in fileobject.c which could
+return a buffer size that was way too large.
+
+- Use PySys_WriteStderr instead of fprintf in most places.
+
+- dictobject.c: remove dead code discovered by Vladimir Marangozov.
+
+- tupleobject.c: make tuples less hungry -- an extra item was
+allocated but never used.  Tip by Vladimir Marangozov.
+
+- mymath.h: Metrowerks PRO4 finally fixes the hypot snafu.  (Jack
+Jansen)
+
+- import.c: Jim Fulton fixes a reference count bug in
+PyEval_GetGlobals.
+
+- glmodule.c: check in the changed version after running the stubber
+again -- this solves the conflict with curses over the 'clear' entry
+point much nicer.  (Jack Jansen had checked in the changes to cstubs
+eons ago, but I never regenrated glmodule.c :-( )
+
+- frameobject.c: fix reference count bug in PyFrame_New.  Vladimir
+Marangozov.
+
+- stropmodule.c: add a missing DECREF in an error exit.  Submitted by
+Jonathan Giddy.
+
+
+======================================================================
+
+
+From 1.5.2a1 to 1.5.2a2
+=======================
+
+General
+-------
+
+- It is now a syntax error to have a function argument without a
+default following one with a default.
+
+- __file__ is now set to the .py file if it was parsed (it used to
+always be the .pyc/.pyo file).
+
+- Don't exit with a fatal error during initialization when there's a
+problem with the exceptions.py module.
+
+- New environment variable PYTHONOPTIMIZE can be used to set -O.
+
+- New version of python-mode.el for Emacs.
+
+Miscellaneous fixed bugs
+------------------------
+
+- No longer print the (confusing) error message about stack underflow
+while compiling.
+
+- Some threading and locking bugs fixed.
+
+- When errno is zero, report "Error", not "Success".
+
+Documentation
+-------------
+
+- Documentation will be released separately.
+
+- Doc strings added to array and md5 modules by Chris Petrilli.
+
+Ports and build procedure
+-------------------------
+
+- Stop installing when a move or copy fails.
+
+- New version of the OS/2 port code by Jeff Rush.
+
+- The makesetup script handles absolute filenames better.
+
+- The 'new' module is now enabled by default in the Setup file.
+
+- I *think* I've solved the problem with the Linux build blowing up
+sometimes due to a conflict between sigcheck/intrcheck and
+signalmodule.
+
+Built-in functions
+------------------
+
+- The second argument to apply() can now be any sequence, not just a
+tuple.
+
+Built-in types
+--------------
+
+- Lists have a new method: L1.extend(L2) is equivalent to the common
+idiom L1[len(L1):] = L2.
+
+- Better error messages when a sequence is indexed with a non-integer.
+
+- Bettter error message when calling a non-callable object (include
+the type in the message).
+
+Python services
+---------------
+
+- New version of cPickle.c fixes some bugs.
+
+- pickle.py: improved instantiation error handling.
+
+- code.py: reworked quite a bit.  New base class
+InteractiveInterpreter and derived class InteractiveConsole.  Fixed
+several problems in compile_command().
+
+- py_compile.py: print error message and continue on syntax errors.
+Also fixed an old bug with the fstat code (it was never used).
+
+- pyclbr.py: support submodules of packages.
+
+String Services
+---------------
+
+- StringIO.py: raise the right exception (ValueError) for attempted
+I/O on closed StringIO objects.
+
+- re.py: fixed a bug in subn(), which caused .groups() to fail inside
+the replacement function called by sub().
+
+- The struct module has a new format 'P': void * in native mode.
+
+Generic OS Services
+-------------------
+
+- Module time: Y2K robustness.  2-digit year acceptance depends on
+value of time.accept2dyear, initialized from env var PYTHONY2K,
+default 0.  Years 00-68 mean 2000-2068, while 69-99 mean 1969-1999
+(POSIX or X/Open recommendation).
+
+- os.path: normpath(".//x") should return "x", not "/x".
+
+- getpass.py: fall back on default_getpass() when sys.stdin.fileno()
+doesn't work.
+
+- tempfile.py: regenerate the template after a fork() call.
+
+Optional OS Services
+--------------------
+
+- In the signal module, disable restarting interrupted system calls
+when we have siginterrupt().
+
+Debugger
+--------
+
+- No longer set __args__; this feature is no longer supported and can
+affect the debugged code.
+
+- cmd.py, pdb.py and bdb.py have been overhauled by Richard Wolff, who
+added aliases and some other useful new features, e.g. much better
+breakpoint support: temporary breakpoint, disabled breakpoints,
+breakpoints with ignore counts, and conditions; breakpoints can be set
+on a file before it is loaded.
+
+Profiler
+--------
+
+- Changes so that JPython can use it.  Also fix the calibration code
+so it actually works again
+.
+Internet Protocols and Support
+------------------------------
+
+- imaplib.py: new version from Piers Lauder.
+
+- smtplib.py: change sendmail() method to accept a single string or a
+list or strings as the destination (commom newbie mistake).
+
+- poplib.py: LIST with a msg argument fixed.
+
+- urlparse.py: some optimizations for common case (http).
+
+- urllib.py: support content-length in info() for ftp protocol;
+support for a progress meter through a third argument to
+urlretrieve(); commented out gopher test (the test site is dead).
+
+Internet Data handling
+----------------------
+
+- sgmllib.py: support tags with - or . in their name.
+
+- mimetypes.py: guess_type() understands 'data' URLs.
+
+Restricted Execution
+--------------------
+
+- The classes rexec.RModuleLoader and rexec.RModuleImporter no
+longer exist.
+
+Tkinter
+-------
+
+- When reporting an exception, store its info in sys.last_*.  Also,
+write all of it to stderr.
+
+- Added NS, EW, and NSEW constants, for grid's sticky option.
+
+- Fixed last-minute bug in 1.5.2a1 release: need to include "mytime.h".
+
+- Make bind variants without a sequence return a tuple of sequences
+(formerly it returned a string, which wasn't very convenient).
+
+- Add image commands to the Text widget (these are new in Tk 8.0).
+
+- Added new listbox and canvas methods: {xview,yview}_{scroll,moveto}.)
+
+- Improved the thread code (but you still can't call update() from
+another thread on Windows).
+
+- Fixed unnecessary references to _default_root in the new dialog
+modules.
+
+- Miscellaneous problems fixed.
+
+
+Windows General
+---------------
+
+- Call LoadLibraryEx(..., ..., LOAD_WITH_ALTERED_SEARCH_PATH) to
+search for dependent dlls in the directory containing the .pyd.
+
+- In debugging mode, call DebugBreak() in Py_FatalError().
+
+Windows Installer
+-----------------
+
+- Install zlib.dll in the DLLs directory instead of in the win32
+system directory, to avoid conflicts with other applications that have 
+their own zlib.dll.
+
+Test Suite
+----------
+
+- test_long.py: new test for long integers, by Tim Peters.
+
+- regrtest.py: improved so it can be used for other test suites as
+well.
+
+- test_strftime.py: use re to compare test results, to support legal
+variants (e.g. on Linux).
+
+Tools and Demos
+---------------
+
+- Four new scripts in Tools/scripts: crlf.py and lfcr.py (to
+remove/add Windows style '\r\n' line endings), untabify.py (to remove
+tabs), and rgrep.yp (reverse grep).
+
+- Improvements to Tools/freeze/.  Each Python module is now written to
+its own C file.  This prevents some compilers or assemblers from
+blowing up on large frozen programs, and saves recompilation time if
+only a few modules are changed.  Other changes too, e.g. new command
+line options -x and -i.
+
+- Much improved (and smaller!) version of Tools/scripts/mailerdaemon.py.
+
+Python/C API
+------------
+
+- New mechanism to support extensions of the type object while
+remaining backward compatible with extensions compiled for previous
+versions of Python 1.5.  A flags field indicates presence of certain
+fields.
+
+- Addition to the buffer API to differentiate access to bytes and
+8-bit characters (in anticipation of Unicode characters).
+
+- New argument parsing format t# ("text") to indicate 8-bit
+characters; s# simply means 8-bit bytes, for backwards compatibility.
+
+- New object type, bufferobject.c is an example and can be used to
+create buffers from memory.
+
+- Some support for 64-bit longs, including some MS platforms.
+
+- Many calls to fprintf(stderr, ...) have been replaced with calls to
+PySys_WriteStderr(...).
+
+- The calling context for PyOS_Readline() has changed: it must now be
+called with the interpreter lock held!  It releases the lock around
+the call to the function pointed to by PyOS_ReadlineFunctionPointer
+(default PyOS_StdioReadline()).
+
+- New APIs PyLong_FromVoidPtr() and PyLong_AsVoidPtr().
+
+- Renamed header file "thread.h" to "pythread.h".
+
+- The code string of code objects may now be anything that supports the
+buffer API.
+
+
+======================================================================
+
+
+From 1.5.1 to 1.5.2a1
+=====================
+
+General
+-------
+
+- When searching for the library, a landmark that is a compiled module
+(string.pyc or string.pyo) is also accepted.
+
+- When following symbolic links to the python executable, use a loop
+so that a symlink to a symlink can work.
+
+- Added a hack so that when you type 'quit' or 'exit' at the
+interpreter, you get a friendly explanation of how to press Ctrl-D (or 
+Ctrl-Z) to exit.
+
+- New and improved Misc/python-mode.el (Python mode for Emacs).
+
+- Revert a new feature in Unix dynamic loading: for one or two
+revisions, modules were loaded using the RTLD_GLOBAL flag.  It turned
+out to be a bad idea.
+
+Miscellaneous fixed bugs
+------------------------
+
+- All patches on the patch page have been integrated.  (But much more
+has been done!)
+
+- Several memory leaks plugged (e.g. the one for classes with a
+__getattr__ method).
+
+- Removed the only use of calloc().  This triggered an obscure bug on
+multiprocessor Sparc Solaris 2.6.
+
+- Fix a peculiar bug that would allow "import sys.time" to succeed
+(believing the built-in time module to be a part of the sys package).
+
+- Fix a bug in the overflow checking when converting a Python long to
+a C long (failed to convert -2147483648L, and some other cases).
+
+Documentation
+-------------
+
+- Doc strings have been added to many extension modules: __builtin__,
+errno, select, signal, socket, sys, thread, time.  Also to methods of
+list objects (try [].append.__doc__).  A doc string on a type will now
+automatically be propagated to an instance if the instance has methods
+that are accessed in the usual way.
+
+- The documentation has been expanded and the formatting improved.
+(Remember that the documentation is now unbundled and has its own
+release cycle though; see http://www.python.org/doc/.)
+
+- Added Misc/Porting -- a mini-FAQ on porting to a new platform.
+
+Ports and build procedure
+-------------------------
+
+- The BeOS port is now integrated.  Courtesy Chris Herborth.
+
+- Symbol files for FreeBSD 2.x and 3.x have been contributed
+(Lib/plat-freebsd[23]/*).
+
+- Support HPUX 10.20 DCE threads.
+
+- Finally fixed the configure script so that (on SGI) if -OPT:Olimit=0
+works, it won't also use -Olimit 1500 (which gives a warning for every
+file).  Also support the SGI_ABI environment variable better.
+
+- The makesetup script now understands absolute pathnames ending in .o
+in the module -- it assumes it's a file for which we have no source.
+
+- Other miscellaneous improvements to the configure script and
+Makefiles.
+
+- The test suite now uses a different sound sample.
+
+Built-in functions
+------------------
+
+- Better checks for invalid input to int(), long(), string.atoi(),
+string.atol().  (Formerly, a sign without digits would be accepted as
+a legal ways to spell zero.)
+
+- Changes to map() and filter() to use the length of a sequence only
+as a hint -- if an IndexError happens earlier, take that.  (Formerly,
+this was considered an error.)
+
+- Experimental feature in getattr(): a third argument can specify a
+default (instead of raising AttributeError).
+
+- Implement round() slightly different, so that for negative ndigits
+no additional errors happen in the last step.
+
+- The open() function now adds the filename to the exception when it
+fails.
+
+Built-in exceptions
+-------------------
+
+- New standard exceptions EnvironmentError and PosixError.
+EnvironmentError is the base class for IOError and PosixError;
+PosixError is the same as os.error.  All this so that either exception
+class can be instantiated with a third argument indicating a filename.
+The built-in function open() and most os/posix functions that take a
+filename argument now use this.
+
+Built-in types
+--------------
+
+- List objects now have an experimental pop() method; l.pop() returns
+and removes the last item; l.pop(i) returns and removes the item at
+i.  Also, the sort() method is faster again.  Sorting is now also
+safer: it is impossible for the sorting function to modify the list
+while the sort is going on (which could cause core dumps).
+
+- Changes to comparisons: numbers are now smaller than any other type.
+This is done to prevent the circularity where [] < 0L < 1 < [] is
+true.  As a side effect, cmp(None, 0) is now positive instead of
+negative.  This *shouldn't* affect any working code, but I've found
+that the change caused several "sleeping" bugs to become active, so
+beware!
+
+- Instance methods may now have other callable objects than just
+Python functions as their im_func.  Use new.instancemethod() or write
+your own C code to create them; new.instancemethod() may be called
+with None for the instance to create an unbound method.
+
+- Assignment to __name__, __dict__ or __bases__ of a class object is
+now allowed (with stringent type checks); also allow assignment to
+__getattr__ etc.  The cached values for __getattr__ etc. are
+recomputed after such assignments (but not for derived classes :-( ).
+
+- Allow assignment to some attributes of function objects: func_code,
+func_defaults and func_doc / __doc__.  (With type checks except for
+__doc__ / func_doc .)
+
+Python services
+---------------
+
+- New tests (in Lib/test): reperf.py (regular expression benchmark),
+sortperf.py (list sorting benchmark), test_MimeWriter.py (test case
+for the MimeWriter module).
+
+- Generalized test/regrtest.py so that it is useful for testing other
+packages.
+
+- The ihooks.py module now understands package imports.
+
+- In code.py, add a class that subsumes Fredrik Lundh's
+PythonInterpreter class.  The interact() function now uses this.
+
+- In rlcompleter.py, in completer(), return None instead of raising an
+IndexError when there are no more completions left.
+
+- Fixed the marshal module to test for certain common kinds of invalid
+input.  (It's still not foolproof!)
+
+- In the operator module, add an alias (now the preferred name)
+"contains" for "sequenceincludes".
+
+String Services
+---------------
+
+- In the string and strop modules, in the replace() function, treat an
+empty pattern as an error (since it's not clear what was meant!).
+
+- Some speedups to re.py, especially the string substitution and split
+functions.  Also added new function/method findall(), to find all
+occurrences of a given substring.
+
+- In cStringIO, add better argument type checking and support the
+readonly 'closed' attribute (like regular files).
+
+- In the struct module, unsigned 1-2 byte sized formats no longer
+result in long integer values.
+
+Miscellaneous services
+----------------------
+
+- In whrandom.py, added new method and function randrange(), same as
+choice(range(start, stop, step)) but faster.  This addresses the
+problem that randint() was accidentally defined as taking an inclusive
+range.  Also, randint(a, b) is now redefined as randrange(a, b+1),
+adding extra range and type checking to its arguments!
+
+- Add some semi-thread-safety to random.gauss() (it used to be able to 
+crash when invoked from separate threads; now the worst it can do is
+give a duplicate result occasionally).
+
+- Some restructuring and generalization done to cmd.py.
+
+- Major upgrade to ConfigParser.py; converted to using 're', added new 
+exceptions, support underscore in section header and option name.  No
+longer add 'name' option to every section; instead, add '__name__'.
+
+- In getpass.py, don't use raw_input() to ask for the password -- we
+don't want it to show up in the readline history!  Also don't catch
+interrupts (the try-finally already does all necessary cleanup).
+
+Generic OS Services
+-------------------
+
+- New functions in os.py: makedirs(), removedirs(), renames().  New
+variable: linesep (the line separator as found in binary files,
+i.e. '\n' on Unix, '\r\n' on DOS/Windows, '\r' on Mac.  Do *not* use
+this with files opened in (default) text mode; the line separator used
+will always be '\n'!
+
+- Changes to the 'os.path' submodule of os.py: added getsize(),
+getmtime(), getatime() -- these fetch the most popular items from the
+stat return tuple.
+
+- In the time module, add strptime(), if it exists.  (This parses a
+time according to a format -- the inverse of strftime().)  Also,
+remove the call to mktime() from strftime() -- it messed up the
+formatting of some non-local times.
+
+- In the socket module, added a new function gethostbyname_ex().
+Also, don't use #ifdef to test for some symbols that are enums on some
+platforms (and should exist everywhere).
+
+Optional OS Services
+--------------------
+
+- Some fixes to gzip.py.  In particular, the readlines() method now
+returns the lines *with* trailing newline characters, like readlines()
+of regular file objects.  Also, it didn't work together with cPickle;
+fixed that.
+
+- In whichdb.py, support byte-swapped dbhash (bsddb) files.
+
+- In anydbm.py, look at the type of an existing database to determine
+which module to use to open it.  (The anydbm.error exception is now a
+tuple.)
+
+Unix Services
+-------------
+
+- In the termios module, in tcsetattr(), initialize the structure vy
+calling tcgetattr().
+
+- Added some of the "wait status inspection" macros as functions to
+the posix module (and thus to the os module): WEXITSTATUS(),
+WIFEXITED(), WIFSIGNALED(), WIFSTOPPED(), WSTOPSIG(), WTERMSIG().
+
+- In the syslog module, make the default facility more intuitive
+(matching the docs).
+
+Debugger
+--------
+
+- In pdb.py, support for setting breaks on files/modules that haven't
+been loaded yet.
+
+Internet Protocols and Support
+------------------------------
+
+- Changes in urllib.py; sped up unquote() and quote().  Fixed an
+obscure bug in quote_plus().  Added urlencode(dict) -- convenience
+function for sending a POST request with urlopen().  Use the getpass
+module to ask for a password.  Rewrote the (test) main program so that
+when used as a script, it can retrieve one or more URLs to stdout.
+Use -t to run the self-test.  Made the proxy code work again.
+
+- In cgi.py, treat "HEAD" the same as "GET", so that CGI scripts don't
+fail when someone asks for their HEAD.  Also, for POST, set the
+default content-type to application/x-www-form-urlencoded.  Also, in
+FieldStorage.__init__(), when method='GET', always get the query
+string from environ['QUERY_STRING'] or sys.argv[1] -- ignore an
+explicitly passed in fp.
+
+- The smtplib.py module now supports ESMTP and has improved standard
+compliance, for picky servers.
+
+- Improved imaplib.py.
+
+- Fixed UDP support in SocketServer.py (it never worked).
+
+- Fixed a small bug in CGIHTTPServer.py.
+
+Internet Data handling
+----------------------
+
+- In rfc822.py, add a new class AddressList.  Also support a new
+overridable method, isheader().  Also add a get() method similar to
+dictionaries (and make getheader() an alias for it).  Also, be smarter
+about seekable (test whether fp.tell() works) and test for presence of
+unread() method before trying seeks.
+
+- In sgmllib.py, restore the call to report_unbalanced() that was lost
+long ago.  Also some other improvements: handle <? processing
+instructions >, allow . and - in entity names, and allow \r\n as line
+separator.
+
+- Some restructuring and generalization done to multifile.py; support
+a 'seekable' flag.
+
+Restricted Execution
+--------------------
+
+- Improvements to rexec.py: package support; support a (minimal)
+sys.exc_info().  Also made the (test) main program a bit fancier (you
+can now use it to run arbitrary Python scripts in restricted mode).
+
+Tkinter
+-------
+
+- On Unix, Tkinter can now safely be used from a multi-threaded
+application.  (Formerly, no threads would make progress while
+Tkinter's mainloop() was active, because it didn't release the Python
+interpreter lock.)  Unfortunately, on Windows, threads other than the
+main thread should not call update() or update_idletasks() because
+this will deadlock the application.
+
+- An interactive interpreter that uses readline and Tkinter no longer
+uses up all available CPU time.
+
+- Even if readline is not used, Tk windows created in an interactive
+interpreter now get continuously updated.  (This even works in Windows
+as long as you don't hit a key.)
+
+- New demos in Demo/tkinter/guido/: brownian.py, redemo.py, switch.py.
+
+- No longer register Tcl_finalize() as a low-level exit handler.  It
+may call back into Python, and that's a bad idea.
+
+- Allow binding of Tcl commands (given as a string).
+
+- Some minor speedups; replace explicitly coded getint() with int() in
+most places.
+
+- In FileDialog.py, remember the directory of the selected file, if
+given.
+
+- Change the names of all methods in the Wm class: they are now
+wm_title(), etc.  The old names (title() etc.) are still defined as
+aliases.
+
+- Add a new method of interpreter objects, interpaddr().  This returns
+the address of the Tcl interpreter object, as an integer.  Not very
+useful for the Python programmer, but this can be called by another C
+extension that needs to make calls into the Tcl/Tk C API and needs to
+get the address of the Tcl interpreter object.  A simple cast of the
+return value to (Tcl_Interp *) will do the trick.
+
+Windows General
+---------------
+
+- Don't insist on proper case for module source files if the filename
+is all uppercase (e.g. FOO.PY now matches foo; but FOO.py still
+doesn't).  This should address problems with this feature on
+oldfashioned filesystems (Novell servers?).
+
+Windows Library
+---------------
+
+- os.environ is now all uppercase, but accesses are case insensitive,
+and the putenv() calls made as a side effect of changing os.environ
+are case preserving.
+
+- Removed samefile(), sameopenfile(), samestat() from os.path (aka
+ntpath.py) -- these cannot be made to work reliably (at least I
+wouldn't know how).
+
+- Fixed os.pipe() so that it returns file descriptors acceptable to
+os.read() and os.write() (like it does on Unix), rather than Windows
+file handles.
+
+- Added a table of WSA error codes to socket.py.
+
+- In the select module, put the (huge) file descriptor arrays on the
+heap.
+
+- The getpass module now raises KeyboardInterrupt when it sees ^C.
+
+- In mailbox.py, fix tell/seek when using files opened in text mode.
+
+- In rfc822.py, fix tell/seek when using files opened in text mode.
+
+- In the msvcrt extension module, release the interpreter lock for
+calls that may block: _locking(), _getch(), _getche().  Also fix a
+bogus error return when open_osfhandle() doesn't have the right
+argument list.
+
+Windows Installer
+-----------------
+
+- The registry key used is now "1.5" instead of "1.5.x" -- so future
+versions of 1.5 and Mark Hammond's win32all installer don't need to be 
+resynchronized.
+
+Windows Tools
+-------------
+
+- Several improvements to freeze specifically for Windows.
+
+Windows Build Procedure
+-----------------------
+
+- The VC++ project files and the WISE installer have been moved to the
+PCbuild subdirectory, so they are distributed in the same subdirectory
+where they must be used.  This avoids confusion.
+
+- New project files for Windows 3.1 port by Jim Ahlstrom.
+
+- Got rid of the obsolete subdirectory PC/setup_nt/.
+
+- The projects now use distinct filenames for the .exe, .dll, .lib and
+.pyd files built in debug mode (by appending "_d" to the base name,
+before the extension).  This makes it easier to switch between the two
+and get the right versions.  There's a pragma in config.h that directs
+the linker to include the appropriate .lib file (so python15.lib no
+longer needs to be explicit in your project).
+
+- The installer now installs more files (e.g. config.h).  The idea is
+that you shouldn't need the source distribution if you want build your
+own extensions in C or C++.
+
+Tools and Demos
+---------------
+
+- New script nm2def.py by Marc-Andre Lemburg, to construct
+PC/python_nt.def automatically (some hand editing still required).
+
+- New tool ndiff.py: Tim Peters' text diffing tool.
+
+- Various and sundry improvements to the freeze script.
+
+- The script texi2html.py (which was part of the Doc tree but is no
+longer used there) has been moved to the Tools/scripts subdirectory.
+
+- Some generalizations in the webchecker code.  There's now a
+primnitive gui for websucker.py: wsgui.py.  (In Tools/webchecker/.)
+
+- The ftpmirror.py script now handles symbolic links properly, and
+also files with multiple spaces in their names.
+
+- The 1.5.1 tabnanny.py suffers an assert error if fed a script whose
+last line is both indented and lacks a newline.  This is now fixed.
+
+Python/C API
+------------
+
+- Added missing prototypes for PyEval_CallFunction() and
+PyEval_CallMethod().
+
+- New macro PyList_SET_ITEM().
+
+- New macros to access object members for PyFunction, PyCFunction
+objects.
+
+- New APIs PyImport_AppendInittab() an PyImport_ExtendInittab() to
+dynamically add one or many entries to the table of built-in modules.
+
+- New macro Py_InitModule3(name, methods, doc) which calls
+Py_InitModule4() with appropriate arguments.  (The -4 variant requires 
+you to pass an obscure version number constant which is always the same.)
+
+- New APIs PySys_WriteStdout() and PySys_WriteStderr() to write to
+sys.stdout or sys.stderr using a printf-like interface.  (Used in
+_tkinter.c, for example.)
+
+- New APIs for conversion between Python longs and C 'long long' if
+your compiler supports it.
+
+- PySequence_In() is now called PySequence_Contains().
+(PySequence_In() is still supported for b/w compatibility; it is
+declared obsolete because its argument order is confusing.)
+
+- PyDict_GetItem() and PyDict_GetItemString() are changed so that they
+*never* raise an exception -- (even if the hash() fails, simply clear
+the error).  This was necessary because there is lots of code out
+there that already assumes this.
+
+- Changes to PySequence_Tuple() and PySequence_List() to use the
+length of a sequence only as a hint -- if an IndexError happens
+earlier, take that.  (Formerly, this was considered an error.)
+
+- Reformatted abstract.c to give it a more familiar "look" and fixed
+many error checking bugs.
+
+- Add NULL pointer checks to all calls of a C function through a type
+object and extensions (e.g. nb_add).
+
+- The code that initializes sys.path now calls Py_GetPythonHome()
+instead of getenv("PYTHONHOME").  This, together with the new API
+Py_SetPythonHome(), makes it easier for embedding applications to
+change the notion of Python's "home" directory (where the libraries
+etc. are sought).
+
+- Fixed a very old bug in the parsing of "O?" format specifiers.
+
+
+======================================================================
+
+
 From 1.5 to 1.5.1
 =================
 
