Got all the 1.5.2 news that's fit to print.  Now we may need to
organize it better...
diff --git a/Misc/NEWS b/Misc/NEWS
index 4f06ba5..941dd50 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -17,8 +17,23 @@
 From 1.5.1 to 1.5.2a1
 =====================
 
-General/Miscellaneous
----------------------
+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).
+
+Miscellaneous fixed bugs
+------------------------
 
 - All patches on the patch page have been integrated.  (But much more
 has been done!)
@@ -26,47 +41,9 @@
 - Several memory leaks plugged (e.g. the one for classes with a
 __getattr__ method).
 
-- 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.)
-
-- 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.
-
-- When searching for the library, a landmark that is a compiled module
-(string.pyc or string.pyo) is also accepted.
-
 - Removed the only use of calloc().  This triggered an obscure bug on
 multiprocessor Sparc Solaris 2.6.
 
-- 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.)
-
-- 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 __dict__ or __bases__ of a class object is now
-allowed (with stringent type checks).  The cached values for
-__getattr__ etc. are recomputed after such assignments (but not for
-derived classes :-( ).
-
-- New and improved Misc/python-mode.el (Python mode for Emacs).
-
-- New, better performing sort() method for list objects.
-
-- 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.
-
-- Experimental feature in getattr(): a third argument can specify a
-default (instead of raising AttributeError).
-
 Documentation
 -------------
 
@@ -80,31 +57,91 @@
 propagated to an instance if the instance has methods that are
 accessed in the usual way.
 
-Ports
------
+- 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]/*).
 
-Windows
--------
+- Support HPUX 10.20 DCE threads.
 
-- The project files have been moved so they are distributed in the
-same subdirectory (PCbuild) where they must be used; this avoids
-confusion.
+- 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.
 
-- New project files for Windows 3.1 port by Jim Ahlstrom.
+- Other miscellaneous improvements to the configure script and
+Makefiles.
 
-- Got rid of the obsolete subdirectory PC/setup_nt/.
+- 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.
 
-- os.environ is now all uppercase, but accesses are case insensitive.
+- The test suite now uses a different sound sample.
 
-- 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?).
+Built-in functions and exceptions
+---------------------------------
+
+- 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.)
+
+- 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.
+
+- 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.
+
+Built-in types and statements
+-----------------------------
+
+- Changes to comparisons: numbers now compare 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 :-( ).
+
+- New, better performing sort() method for list objects.
+
+- 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 (this could cause core dumps).
+
+- Fix a bug in the overflow checking when converting a Python long to
+a C long (failed to convert -2147483648L, and other spurious bugs).
+
+- Allow assignment to some attributes of function objects: func_code,
+func_defaults and func_doc / __doc__.  (With type checks except for
+__doc__ / func_doc .)
+
+- 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).
 
 Library modules
 ---------------
@@ -113,9 +150,11 @@
 sortperf.py (list sorting benchmark), test_MimeWriter.py (test case
 for the MimeWriter module).
 
-- Changes to os.py: os.environ now upcases keys before storing them on
-Windows, DOS and OS/2; new functions makedirs(), removedirs(),
-renames().
+- 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
@@ -134,26 +173,32 @@
 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).
+
 - 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!
+don't want it to show up in the readline history!  Also don't catch
+interrupts (the try-finally already does all necessary cleanup).
 
 - Generalized test/regrtest.py so that it is useful for testing other
 packages.
 
-- Some small 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().
-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.
+- 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 pdb.py, support for setting breaks on files/modules that haven't
 been loaded yet.
 
-- In rfc822.py, fix tell/seek when using files opened in text mode on
-Windows.  Also add a new class AddressList.
-
-- In mailbox.py, fix tell/seek when using files opened in text mode on
-Windows.
+- 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.
 
 - Some speedups to re.py, especially the string substitution and split
 functions.  Also added new function/method findall(), to find all
@@ -164,7 +209,9 @@
 can now use it to run arbitrary Python scripts in restricted mode).
 
 - In sgmllib.py, restore the call to report_unbalanced() that was lost
-long ago.
+long ago.  Also some other improvements: handle <? processing
+instructions >, allow . and - in entity names, and allow \r\n as line
+separator.
 
 - Major upgrade to ConfigParser.py; converted to using 're', added new 
 exceptions, support underscore in section header and option name.  No
@@ -176,8 +223,12 @@
 
 - Some restructuring and generalization done to multifile.py.
 
-- In cgi.py, treat "HEAD" the same as "GET", so that CGI scripts don't 
-fail when someone asks for their HEAD.
+- 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.
 
 - Improved imaplib.py.
 
@@ -191,30 +242,25 @@
 - In rlcompleter.py, in completer(), return None instead of raising an
 IndexError when there are no more completions left.
 
+- 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!).
 
-Tkinter
--------
+- The gzip.py module didn't work together with cPickle.  Fixed.
 
-- New demos in Demo/tkinter/guido/: brownian.py, redemo.py, switch.py.
+- Fixed a small bug in CGIHTTPServer.py.
 
-- No longer register Tcl_finalize() as a low-level exit handler.  It
-may call back into Python, and that's a bad idea.
+- In whichdb.py, support byte-swapped dbhash (bsddb) files.
 
-- 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.
-
-- Allow binding of Tcl commands (given as a string).
-
-- Some minor speedups.
+- 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.)
 
 Extension modules
 -----------------
 
-- In the socket module: new function gethostbyname_ex().
+- In the socket module: new function gethostbyname_ex().  Also, don't
+use #ifdef to test for some symbols that are enums on some platforms
+(and should exist everywhere).
 
 - Added some of the "wait status inspection" macros as functions:
 WEXITSTATUS(), WIFEXITED(), WIFSIGNALED(), WIFSTOPPED(), WSTOPSIG(),
@@ -223,41 +269,166 @@
 - In cStringIO, add better argument type checking and support the
 readonly 'closed' attribute (like regular files).
 
-- On Windows, in select, put the (huge) file descriptor arrays on the
-heap.
-
 - In the struct module, unsigned 1-2 byte sized formats no longer
 result in long integer values.
 
-Build procedure
+- In the termios module, in tcsetattr(), initialize the structure vy
+calling tcgetattr().
+
+- 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.
+
+- 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".
+
+- In the syslog module, make the default facility more intuitive
+(matching the docs).
+
+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
+-------
+
+- 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.
+
+- The project files have been moved so they are distributed in the
+same subdirectory (PCbuild) 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/.
+
+- os.environ is now all uppercase, but accesses are case insensitive.
+
+- 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?).
+
+- 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.
+
+- In the select module, put the (huge) file descriptor arrays on the heap.
+
+- The getpass module now raises KeyboardInterrupt when it sees ^C.
+
+- Changes to os.py: os.environ now upcases keys before storing them on
+Windows, DOS and OS/2.
+
+- 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.
+
+- Several improvements to freeze (mostly, but not exclusively for
+Windows).
+
+- Moved the VC++ project files and the WISE installer script from PC
+to PCbuild.
+
+- 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).
+
+- 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.
+
+- 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.
+
+- 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++.
+
+- Fixed a very old bug in the parsing of "O?" format specifiers.
+
+- Added a table of WSA error codes to socket.py.
+
+- Removed samefile(), sameopenfile(), samestat() from os.path (aka
+ntpath.py) -- these cannot be made to work reliably (at least I
+wouldn't know how).
+
+Tools and Demos
 ---------------
 
-- 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).
-
-- Other miscellaneous improvements to the configure script.
-
-Tools
------
-
-- Some improvements to the freeze script.
+- 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/.)
 
-- Some improvements to freeze (made it more robust on Windows).
+- The ftpmirror.py script now handles symbolic links properly, and
+also files with multiple spaces in their names.
 
-- The ftpmirror.py script now handles symbolic links properly.
+- 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 APIs for conversion between Python longs and C 'long long' if
 your compiler supports it.
 
@@ -267,7 +438,7 @@
 change the notion of Python's "home" directory (where the libraries
 etc. are sought).
 
-- Changes to PySequence_Tuple() and PySequence_List() to use the
+- Changes to PySequence_Tuple() and PySequence_Lis(t) to use the
 length of a sequence only as a hint -- if an IndexError happens
 earlier, take that.  (Formerly, this was considered an error.)
 
@@ -281,6 +452,31 @@
 Py_InitModule4() with appropriate arguments.  (The -4 variant requires 
 you to pass an obscure version number constant which is always the same.)
 
+- 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).
+
+- 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.
+
+- 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 macro PyList_SET_ITEM().
+
+
+======================================================================
+
+
 From 1.5 to 1.5.1
 =================
 
@@ -666,7 +862,6 @@
 variable PYTHONCASEOK (to any value).
 
 
-
 ======================================================================
 
 
@@ -1399,7 +1594,6 @@
 Also, the command argument can now be either a string (passed to the
 shell) or a list of arguments (passed directly to execv).
 
-
 - Alas, the thread support for _tkinter released with 1.5a3 didn't
 work.  It's been rewritten.  The bad news is that it now requires a
 modified version of a file in the standard Tcl distribution, which you