Sat Oct  7 15:18:22 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/fcntlmodule.c: add BGN/END_SAVE macros around
	fcntl/ioctl calls

Sat Oct  7 15:14:01 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/pythonrun.c: keep exitfunc alive while calling it

Sat Oct  7 15:08:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: better version sanity checks; get rid
	of Widget.unbind_class()

Fri Oct  6 11:31:30 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/formatter.py: added NullFormatter

Fri Oct  6 11:30:57 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: strip <A> attribute values

Fri Oct  6 11:30:28 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/sgmllib.py: typos in attrfind regex

Fri Oct  6 11:26:52 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmlentitydefs.py: added lt, gt, amp back to entity
	definitions

Wed Oct  4 12:39:20 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/base64.py: Use binascii module (resulting in a 60-fold
	speedup:-)

Wed Oct  4 12:38:44 1995  Jack Jansen  <jack@cwi.nl>

	* Modules/binasciimodule.c: Added base64 support

Wed Oct  4 12:36:53 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/uu.py: Fixed two minor errors.

Tue Oct  3 10:41:15 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/binhex.py: Fixed hexbin handling

Tue Oct  3 10:40:35 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/{Relnotes-1.3,ReadMeOrSuffer}: Clarified some things,
	started adding mods since 1.3beta3

Tue Oct  3 10:39:44 1995  Jack Jansen  <jack@cwi.nl>

	* {Mac/macfs/macfsmodule.c, Modules/timemodule.c,
        Python/{import.c,compile.c}}: Removed unused variables

Sat Sep 30 13:05:26 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: new after options; text.search; new
	image methods

Sat Sep 30 13:01:49 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Makefile.pre.in: Move some stuff around so
	customizations in Setup take precedence

Sat Sep 30 13:01:02 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/newmodule.c: re-enable new.code(...) with new args

Sat Sep 30 13:00:24 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/tkintermodule.c: clear quitMainLoop when we fall
	through the main loop

Sat Sep 30 12:51:50 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/ftplib.py: actualized example, catch EOFError, print
	retrieved lines if debugging>2

Sat Sep 30 12:50:46 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/httplib.py: actualized example/reference, fix bug w/
	nonnumeric port

Sat Sep 30 12:49:58 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/formatter.py: add flush_softspace() interface

Sat Sep 30 12:49:36 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/sgmllib.py: allow _ in attr names (Netscape!)

Sat Sep 30 12:48:54 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/{pstats.py,profile.py}: more robust coding, adapted for mac

Sat Sep 30 12:10:43 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/rename2.h: delete PyNothing_Check, which does not
	actually exist

Wed Sep 27 12:22:17 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: entity definitions from HTML 2.0 std

Sun Sep 24 17:08:22 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/ReadMeOrSuffer: Added some clarifications and fixed host
	names.

Sun Sep 24 17:06:50 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/MkPluginAliases.py: Load toolbox modules "by hand"
	using imp, so this script should now work in a virgin
	distribution.

Sun Sep 24 17:05:24 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/mkapplet.py: Changed the way .rsrc and template
	are copied: hopefully this will finally get the bundle stuff
	right.

Fri Sep 22 19:49:28 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/tkintermodule.c: Mac changes

Thu Sep 21 20:55:50 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: added verbose option; added
	ismap/align/width/height to handle_image args

Thu Sep 21 20:54:32 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/sgmllib.py: fix <!...!> parsing; added verbose option;
	don't lowercase entityrefs

Thu Sep 21 20:52:38 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/nntplib.py: actualized example; added xover, xgtitle,
	xpath, date methods by Kevan Heydon

Thu Sep 21 16:36:34 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Parser/tokenizer.c: fix bogus resize length in nextc

Wed Sep 20 16:31:51 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/traceback.py: add file parameter to all printing fns,
	default stderr

Mon Sep 18 18:00:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/irix5/panel.py: new exec syntax

Mon Sep 18 17:54:35 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: added getitem/setitem to Image class;
	changed call wrapping (again)

Mon Sep 18 17:52:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/cgi.py: handle missing QUERY_STRING

Mon Sep 18 17:50:43 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/SimpleHTTPServer.py: recognize a few more file types

Mon Sep 18 17:49:24 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/{quopri.py,base64.py}: improved test/main program

Mon Sep 18 17:44:04 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/compile.c: fix bug with missing default for last arg
	(discovered by Tommy Burnette)

Mon Sep 18 17:42:42 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/pythonrun.c: #undef argument, for the Mac

Mon Sep 18 17:40:19 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/{getversion.c,getcopyright.c}: include Python.h

Mon Sep 18 17:31:16 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/errors.c: remove unwanted fatal() from err_badcall()

Mon Sep 18 17:29:36 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/{traceback.{c,h},ceval.c}: spell TraceBack with capital B

Mon Sep 18 17:20:02 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/abstract.h: use Py_PROTO macro

Mon Sep 18 17:17:59 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/abstract.c: adapted to K&R C

Mon Sep 18 06:49:04 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Objects/classobject.c: Get ordering right for
	TRACE_REFS/COUNT_ALLOCS combination (otherwise may get inc_count
	sanity check abort).

Wed Sep 13 14:39:47 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/socketmodule.c: plug some leaks

Wed Sep 13 14:39:04 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Setup.in: added SITEPATH and DESTPATH variables

Wed Sep 13 13:39:51 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/posixmodule.c: added 5th return item, clock time, to
	posix.times()

Wed Sep 13 13:39:06 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/stropmodule.c: added strop.translate(s, table)

Wed Sep 13 13:38:35 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/timemodule.c: added time.strftime()

Thu Sep  7 15:37:11 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/allobjects.h: removed redundant C++ hack

Thu Sep  7 15:28:19 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/httplib.py: fixed the test program

Thu Sep  7 15:22:00 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: move constants to Tkconstants; added
	some; overridable error reporting; fix typo in propagate

Fri Sep  1 18:55:11 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/mac/dbmac.py: add (dummy) mode arg to open()

Fri Sep  1 18:53:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/mac/socket.py: added read/writelines, bufsize to makefile,
	gethostbyaddr

Fri Sep  1 16:36:47 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/FileDialog.py: Filter button should set
	selection's directory, too

Fri Sep  1 16:35:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: added OptionMenu class (tk_optionMenu
	interface)

Fri Sep  1 16:34:29 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/sgmllib.py: support value-less attributes, using
	regex.group()

Fri Sep  1 16:33:32 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: took out forms support (in favor a Grail
	extension)

Fri Sep  1 16:32:21 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/posixpath.py: rationalized os.path.split() so split "/a/"
	yields "/a", ""

Fri Sep  1 07:54:11 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/mkapplet.py: Slightly reorganized so it is useable
	from another program, and put all print statements in 'if
	DEBUG'.

Fri Sep  1 07:53:17 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/binhextree.py: Fixed typo

Fri Sep  1 07:50:53 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/Resources/bundle.rsrc.hqx: Minor fix

Fri Sep  1 07:49:10 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/Relnotes-1.3: Updated 1.3 relnotes and added top-level
	instructions

Fri Sep  1 07:48:10 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macgetpath.c: Fixed to work on 68K (could be yet another
	optimizer bug or something)

Fri Sep  1 07:46:27 1995  Jack Jansen  <jack@cwi.nl>

	* Include/patchlevel.h: patchlevel set to 1.3b3

Thu Aug 31 09:59:36 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/{pythonresources.h,macgetpath.c,macgetargv.c}: Python will
	now attempt (again) to create at least a minimal preferences file
	if it is missing.

Thu Aug 31 09:58:28 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: Added List module

Thu Aug 31 09:57:40 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/{macglue.c,macmain.c,mwerks/{mwfopenrf.c,malloc/malloc.c}}:
        Removed unused variables

Thu Aug 31 09:53:10 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/Resources/dialogs.rsrc.hqx: Added version resource Added
	dialogs for initial preference file creation

Thu Aug 31 09:53:09 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/Resources/bundle.rsrc.hqx: Added version resource Added
	dialogs for initial preference file creation

Thu Aug 31 09:51:58 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/mwerks/mwfopenrf.c: removed unused var

Thu Aug 31 09:51:13 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/mwerks/malloc/malloc.c: Removed unused var

Thu Aug 31 09:48:43 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/mkapplet.py: - Allow PythonApplet to be an alias -
	Correctly set bundle and init bits

Thu Aug 31 09:47:14 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/binhextree.py: Added functionality: locate CW
	projects, copy them, empty them and binhex them.

Thu Aug 31 09:46:13 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/RunLibScript.py: - imp seems to always want a file
	object arg - continue if resource file not found (may be an
	applet)

Thu Aug 31 09:44:23 1995  Jack Jansen  <jack@cwi.nl>

	* Modules/binasciimodule.c: Obscure bugfix

Thu Aug 31 09:40:03 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/mac/macostools.py: copy() can now create destination path

Thu Aug 31 09:38:01 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/mac/FrameWork.py: Fixed dialog-window event handling

Wed Aug 30 19:44:41 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Setup.in: fix typo in bsddb entry

Wed Aug 30 08:19:30 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/uu.py: Changed arguments and added a lot of functionality
	besides

Tue Aug 29 15:25:11 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/mimetools.py: forget previous change (content-encoding)

Tue Aug 29 15:19:51 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/mimetools.py: encoding can be content-transfer-encoding or
	content-encoding

Tue Aug 29 15:19:12 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/urllib.py: support overriding how to open unknown url
	types

Tue Aug 29 15:18:24 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/CGIHTTPServer.py: changed some commas into percent signs

Tue Aug 29 05:18:14 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* {Python/sysmodule.c,Objects/object.c}: Implemented two new
	functions in sys: getcounts() returns a list of counts of
	allocations and deallocations for all different object
	types. getobjects(n [, type ]) returns a list of recently
	allocated and not-yet-freed objects of the given type (all objects
	if no type given). Only the n most recent (all if n==0) objects
	are returned. getcounts is only available if compiled with
	-DCOUNT_ALLOCS, getobjects is only available if compiled with
	-DTRACE_REFS. Note that everything must be compiled with these
	options!

Mon Aug 28 05:00:43 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Objects/classobject.c: Fixed calling of __del__ method with
	TRACE_REFS defined.

Sun Aug 27 22:59:06 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Setup.in: dbhash -> bsddb

Sun Aug 27 22:58:31 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/dbmmodule.c: fix bug in close()

Sun Aug 27 22:58:00 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/gdbmmodule.c: fix leaks in keys(); fix bug in close()

Sun Aug 27 22:56:20 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/marshal.c: rd_object() with exception is fatal error

Sun Aug 27 22:55:48 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/errors.c: err_badcall() is fatal error

Sun Aug 27 22:54:01 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/irix5/flp.py: exec() -> exec

Sun Aug 27 22:53:41 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/irix5/regen: add errno.h

Thu Aug 17 10:18:20 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/mac/FrameWork.py: Made separate window class (and
	subclasses for special windows like dialogs). This is an
	incompatible change.

Thu Aug 17 10:17:39 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/binhex.py: Indent bug

Tue Aug 15 07:33:39 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Lib/urllib.py: Removed addbase.__del__ because it can't work.
	If code keeps a reference to self.fp or any of its methods, you
	don't want to close self.fp just because no explicit reference
	is kept to self.

Mon Aug 14 08:41:20 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/binhex.py: Put debug output inside 'if DEBUG'.

Mon Aug 14 08:39:54 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/mac/FrameWork.py: Various fixes: missing imports, missing
	calls to MacOS.HandleEvent. Also, prints are now inside 'if
	DEBUG'.

Mon Aug 14 08:36:37 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macglue.h: Added PyMac_PromptGetFile, removed stuff gone
	to other sources.

Mon Aug 14 08:35:10 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macglue.c: Lots of stuff moved to other files. Include
	pythonresources.h.

Mon Aug 14 08:33:48 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: Lots of stuff removed: gone to various other
	files.

Mon Aug 14 08:33:20 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macmain.c: This is completely different from the old
	mainmain (which wasn't used anymore) and is the new main program
	for MacPython. Built from bits and pieces of config.c, macglue.c
	and pythonmain.c.

Mon Aug 14 08:30:15 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macgetcompiler.c: Merged Jack's macgetcompiler.c and
	Guido's maccompiler.c and named the result macgetcompiler.c
	(after all, *I* did the merging:-)

Mon Aug 14 08:24:05 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/Resources/dialogs.rsrc.hqx: Renumbered dialogs: 128-255
	are for interpreter use 256-511 are for extension modules,
	libraries, etc 512 and above are for applications

Mon Aug 14 08:22:56 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macfs/macfsmodule.c: Added new call PromptGetFile (like
	StandardGetFile, but accepts a prompt) and added optional prompt
	to GetDirectory.

Mon Aug 14 08:21:50 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/mwerks/mwfopenrf.c: Added missing initializer and extra
	error check.

Mon Aug 14 08:21:12 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/*: Added prompts to various
	file-select dialogs Renumbered resources to above 512

Mon Aug 14 08:20:22 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/scripts/MkPluginAliases.{py,as}: Added List.slb alias

Mon Aug 14 08:17:57 1995  Jack Jansen  <jack@cwi.nl>

	* Modules/binasciimodule.c: Added missing 'leftchar'
	initializer.

Mon Aug 14 08:17:18 1995  Jack Jansen  <jack@cwi.nl>

	* Modules/stdwinmodule.c: Shuffled include's around (name
	conflict on Mac wrt teclick())

Mon Aug 14 03:49:51 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Lib/sunau.py: Temporary fix for access statement. Definition
	of Error was missing.

Fri Aug 11 10:24:47 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/test/test_exceptions.py: exec() -> exec

Fri Aug 11 10:24:35 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/test/test_b2.py: test for specific bug in vars()

Fri Aug 11 10:21:06 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: added select_present and select_range
	to Entry widget

Fri Aug 11 10:19:16 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/shelve.py: renamed DbShelf->DbfilenameShelf;added
	BsdDbShelf (David Ely)

Fri Aug 11 10:18:27 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/anydbm.py: change default flag to match dbm/gdbm

Fri Aug 11 09:56:04 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/rexec.py: make sure the path ends in a slash in reload()

Thu Aug 10 15:46:50 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/profile.py: exec() -> exec

Thu Aug 10 15:45:41 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/urlparse.py: remove file: from list of protocols taking
	host

Thu Aug 10 15:44:54 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/urllib.py: changed version :-)

Thu Aug 10 15:43:53 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/sgmllib.py: added note about missing features

Thu Aug 10 15:43:04 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tb.py: noted obsolescence; exec() -> exec

Thu Aug 10 15:42:05 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/string.py: default tabsize to 8

Thu Aug 10 15:40:39 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/rexec.py: fix reload use of __filename__

Thu Aug 10 15:38:36 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/posixfile.py: fix stupid typo: r->RDLK

Thu Aug 10 15:34:50 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/ntpath.py: same thing as for dospath, plus
	HOMEDRIVE/HOMEPATH support

Thu Aug 10 15:32:22 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/linecache.py: don't print Cannot open/stat messages

Thu Aug 10 15:31:20 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/importall.py: exec() -> exec

Thu Aug 10 15:27:42 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/dospath.py: redefined normcase()

Thu Aug 10 15:26:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/base64.py: upgdaded the test program

Thu Aug 10 15:24:30 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/anydbm.py: revamped somewhat

Thu Aug 10 15:23:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/aifc.py: temporarily disabled the access statements

Thu Aug 10 14:09:16 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/macpath.py: added normpath() and splitdrive()

Thu Aug 10 14:00:03 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/fmt.py: added note about obsolescence

Thu Aug 10 14:00:00 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/Para.py: added note about obsolescence

Wed Aug  9 11:17:23 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: re-enabled newmodule

Tue Aug  8 22:33:38 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/audiodev.py: rather ugly temporary hacks to make it work
	in grail & restricted mode

Tue Aug  8 22:32:49 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/ihooks.py: fix bug in reload

Tue Aug  8 22:32:08 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/rexec.py: add module binascii; add r_unload/s_unload;
	don't change 'rb' to 'r' in open

Tue Aug  8 22:31:00 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: change blank line insertion at a few places
	and fix recursion bug for </var>

Tue Aug  8 10:18:12 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Makefile.pre.in: added MACHDEP back in

Tue Aug  8 10:10:22 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Mac/macmodule.c: add xstat (extended stat, returns resource
	fork size and creator/type)

Tue Aug  8 10:09:33 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Mac/macstat.c: set some fields to zero for directories

Mon Aug  7 16:19:27 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/rexec.py: added sys.std files, read-only open, reload

Mon Aug  7 16:17:55 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/posixpath.py: add splitdrive()

Mon Aug  7 16:17:23 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/popen2.py: pass the command to sh -c

Mon Aug  7 16:16:58 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/pickle.py: correct typo (persis*ent)

Mon Aug  7 16:16:05 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/pdb.py: use new "single" compile option

Mon Aug  7 16:15:23 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/os.py: make sure os.environ exists (maybe empty)

Mon Aug  7 16:13:56 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/mimetools.py: add seekable option to __init__

Mon Aug  7 16:13:02 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/httplib.py: use mimetools; add close()

Mon Aug  7 16:12:09 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/cgi.py: added parse_qs(query_string)

Mon Aug  7 16:07:44 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: new formatter module; redid htmllib module to
	use it

Mon Aug  7 10:37:38 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/uu.py: Use binascii module for inner loop

Mon Aug  7 10:36:06 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macglue.c: Better error messages wrt missing resources and
	preferences

Mon Aug  7 10:35:24 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: Added binascii

Mon Aug  7 10:34:15 1995  Jack Jansen  <jack@cwi.nl>

	* Modules/Setup.in: Helper module for uuencode and binhex coders

Mon Aug  7 10:09:27 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/macpath.py: Added missing walk() function

Mon Aug  7 10:04:10 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macfs/macfsmodule.c: Added interfaces to {Get,Set}FInfo
	and accompanying objects

Mon Aug  7 10:03:14 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.h: Mwerks now also has fopenrf

Mon Aug  7 10:01:46 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/mwerks/mwerks_nonshared_config.h: Fix for cfm68k

Fri Aug  4 00:39:30 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/ftplib.py: new sendport() interface; add test() program
	call

Fri Aug  4 00:30:30 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/traceback.py: added format_* functions (suggestion by Ken
	M)

Fri Aug  4 00:29:32 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/urlparse.py: subtle changes to relative url joins

Fri Aug  4 00:29:05 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/urllib.py: use mimetools; add error handling and
	authentication

Fri Aug  4 00:23:30 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: major rewrite using different formatting
	paradigm

Fri Aug  4 00:22:39 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/sgmllib.py: changed comment parsing

Fri Aug  4 00:20:45 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/{config.c.in,Setup.in,Makefile.pre.in}: split config.c
	in 1000 parts; new main; new unfinished objective-C module

Fri Aug  4 00:14:47 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/ceval.c: empty kw dict is ok for builtins

Fri Aug  4 00:13:00 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/Makefile.in: split config.c in 1000 little files :-)

Fri Aug  4 00:10:43 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/frozenmain.c: moved stuff around to resemble main.c

Fri Aug  4 00:08:57 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/import.c: add imp.get_frozen_object()

Fri Aug  4 00:07:45 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/bltinmodule.c: avoid resize of 0-length tuple

Fri Aug  4 00:05:31 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/classobject.c: class objects are read-only in
	restricted mode

Fri Aug  4 00:05:10 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/tupleobject.c: better err checks in resizetuple

Thu Aug  3 23:59:03 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/rexec.py: new package support, import hooks, restricted
	execution support

Thu Aug  3 23:51:48 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: added some missing constants

Thu Aug  3 23:50:29 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Tkinter.py: keyword arguments; redid Photo image
	class; other goodies

Thu Aug  3 23:49:39 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/Dialog.py: keyword parameter changes

Sat Jul 29 09:55:06 1995  Jack Jansen  <jack@cwi.nl>

	* Python/pythonrun.c: mac CW-only fix for messy windows upon
	exit

Sat Jul 29 09:52:37 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macglue.c: Added code so you canset "command line options"
	if you option-click/drag python. Needs a new dialog resource.

Sat Jul 29 09:50:59 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macgetargv.c: Un-installing of AE handlers fixed (AE is
	very picky that you specify the same UPP)

Fri Jul 28 19:06:00 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/ceval.c: fix bogus DECREF in finally clause

Fri Jul 28 12:44:53 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/newmodule.c: \temporary 'fix' for brokenness

Fri Jul 28 07:44:29 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/chdir.c: Made more ppc-savvy

Fri Jul 28 07:29:54 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: - Added getplatform() - (temporarily?) removed
	newmodule reference

Fri Jul 28 07:28:14 1995  Jack Jansen  <jack@cwi.nl>

	* Python/import.c: Undef 'argument' before including mac headers

Wed Jul 26 14:16:42 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/ceval.c: changes for keyword args to built-in functions
	and classes

Wed Jul 26 14:13:27 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/import.c: never close the file in imp.load_...

Wed Jul 26 14:07:32 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/methodobject.c: changes for keyword args to built-in
	functions and classes

Wed Jul 26 14:07:26 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/classobject.c: changes for keyword args to built-in
	functions and classes

Wed Jul 26 13:58:29 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/rename2.h: changes for keyword args to built-in
	functions and classes

Wed Jul 26 13:58:27 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/methodobject.h: changes for keyword args to built-in
	functions and classes

Wed Jul 26 13:58:23 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/classobject.h: changes for keyword args to built-in
	functions and classes

Wed Jul 26 13:53:29 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/object.h: add forgotten PyObject_SetAttrString

Wed Jul 26 13:33:44 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/dbhashmodule.c: add locking where it exists

Wed Jul 26 13:33:10 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/md5module.c: use newgetargs

Wed Jul 26 13:31:41 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Setup.in: improved comments for curses, dbhash

Wed Jul 26 13:29:45 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/tkintermodule.c: use getnewargs where it makes sense

Wed Jul 26 12:26:31 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/bltinmodule.c: be more suspicious of getlocals()

Wed Jul 26 12:14:30 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/frameobject.c: better policy regarding NULL locals

Wed Jul 19 07:21:47 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Lib/py_compile.py: Get magic number from interpreter (using
	module imp).

Wed Jul 19 07:21:21 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Lib/StringIO.py: Added flush() method.

Tue Jul 18 14:33:09 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/dbhashmodule.c: fixed arg checking for keys() and
	close()

Tue Jul 18 14:18:11 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Setup.in: added dbhash; Tk is now officially at 4.0

Tue Jul 18 14:16:52 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/posixmodule.c: suppress . and .. in listdir return
	value

Tue Jul 18 10:51:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/*.c: keyword arguments and faster calls

Tue Jul 18 10:40:09 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/importdl.c: NT specific change for nicer error message
	(Mark H)

Tue Jul 18 10:30:34 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/{Makefile.in,funcobject.c,frameobject.c,abstract.c}:
	changes for keyword arguments and fast function call; added
	abstract.c

Tue Jul 18 10:21:06 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/*.h: keyword arguments and faster function
	calls

Tue Jul 18 10:07:52 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/allobjects.h: include abstract.h

Mon Jul 17 09:25:15 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/mac/FrameWork.py: Various toolbox routines have gotten new
	names.

Mon Jul 17 09:25:14 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/mac/EasyDialogs.py: Various toolbox routines have gotten
	new names.

Mon Jul 17 07:36:01 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macosmodule.c: Added GetErrorString method (convert OSErr
	number to string)

Fri Jul 14 11:29:10 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/tkinter/{Tkinter.py,Dialog.py}: Tk 4.0 and Tcl 7.4 are now
        standard

Tue Jul 11 22:22:06 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/classobject.c: args to call_object must be tuple or
	NULL

Tue Jul 11 22:22:01 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/listobject.c: args to call_object must be tuple or
	NULL

Tue Jul 11 22:21:58 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/object.c: args to call_object must be tuple or NULL

Mon Jul 10 19:32:26 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Objects/fileobject.c: fix read(0), readline(0); make tuple for
	call_object args

Mon Jul 10 09:52:21 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/bltinmodule.c: rename arglist to alist (conflict with
	new grammar symbol)

Fri Jul  7 18:53:21 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/compile.c: 3rd arg for raise; INCOMPLETE keyword
	parameter passing (currently f(kw=value) is seen as f('kw',
	value))

Fri Jul  7 18:53:14 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/ceval.c: 3rd arg for raise; INCOMPLETE keyword
	parameter passing (currently f(kw=value) is seen as f('kw',
	value))

Fri Jul  7 18:50:36 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/import.c: new MAGIC; some changes to default files for
	imp.load_... functions

Fri Jul  7 18:45:41 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/traceback.c: ignore control-l (parallelling change to
	tokenizer.c)

Fri Jul  7 18:45:02 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/sysmodule.c: added sys.platform

Fri Jul  7 18:44:10 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/graminit.c: new grammar

Fri Jul  7 18:43:42 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/bltinmodule.c: added locals() and globals();
	[raw_]input() uses readline()

Fri Jul  7 18:39:14 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/cgen.py: err() should be varargs -- and fix one call

Fri Jul  7 18:38:14 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/config.c.in: added getpalatform()

Fri Jul  7 18:37:11 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/gdbmmodule.c: normalized flag arg and made flag, mode
	default args; minor cosmetics

Fri Jul  7 18:37:09 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/dbmmodule.c: normalized flag arg and made flag, mode
	default args; minor cosmetics

Fri Jul  7 18:35:21 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Makefile.pre.in: pass $PLATFORM into config.c

Fri Jul  7 18:32:10 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/opcode.h: new opcodes RAISE_VARARGS, CALL_FUNCTION

Fri Jul  7 18:31:40 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/graminit.h: new grammar symbols arglist and argument

Fri Jul  7 18:27:27 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Parser/tokenizer.c: ignore control-l in whitespace

Fri Jul  7 18:26:23 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Grammar/Grammar: new grammar for 3rd raise arg and keyword
	parameters

Tue Jun 27 09:17:54 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/*: Initial port to CodeWarrior CFM68K support
	(mainly by disabling unsupported features).

Tue Jun 27 09:15:14 1995  Jack Jansen  <jack@cwi.nl>

	* Python/{importdl.c,errors.c}: Porting to CW CFM68K

Tue Jun 27 09:12:09 1995  Jack Jansen  <jack@cwi.nl>

	* Include/{mymath.h,mymalloc.h,allobjects.h}: Changed ifdef
	__CFM68K__ to ifdef SYMANTEC__CFM68K__: CW has its own unique set
	of ideosyncracies:-(

Thu Jun 22 15:06:57 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/rfc822.py: added seekable option; save unix from lines;
	speed up islast()

Thu Jun 22 15:00:13 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/urllib.py: add User-agent hdr; read and close the file
	upon http error

Thu Jun 22 14:58:00 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/string.py: make split and splitfields, join and joinfields
	synonyms

Thu Jun 22 14:56:36 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/sgmllib.py: make reporting unbalanced tags an overridable
	method

Thu Jun 22 14:55:10 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/rexec.py: use imp.new_module(), not new.module(); and
	/usr/local

Thu Jun 22 14:52:35 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/profile.py: functions don't have a __name__ attribute

Thu Jun 22 14:51:23 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/pickle.py: test other name variable

Thu Jun 22 14:48:48 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/httplib.py: discard endrequest(); minor stuff; rfc822 no
	seek flag

Thu Jun 22 14:46:12 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/htmllib.py: support <HTML>, remove <HEADER>

Thu Jun 22 14:45:04 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/StringIO.py: set softspace to 0 in __init__

Tue Jun 20 13:21:42 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/ftplib.py: add bind(0,''); better way of guessing our
	fully qualified hostname

Sun Jun 18 16:06:44 1995  Jack Jansen  <jack@cwi.nl>

	* Python/import.c: Added PY_RESOURCE (mac only) to imp module

Sun Jun 18 16:05:14 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macfs/macfsmodule.c: Added FindFolder interface

Sun Jun 18 16:03:40 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macglue.c: Added code to obtain sys.path from a resource
	Removed code to update the preferences file, use
	EditPythonPrefs.py in stead (actually, code is still there if
	you define USE_MAC_MODPREFS)

Sun Jun 18 15:57:01 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: Obtain path from a resource (unless
	USE_BUILTIN_PATH is #defined)

Fri Jun 16 06:57:14 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/rfc822.py: Removed >From stuff

Wed Jun 14 18:54:23 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/posixmodule.c: sys/wait.h; NeXT changes (no unistd,
	utime; getcwd?)

Wed Jun 14 18:52:06 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/makesetup: fix NL for Linux bash bug; special
	processing for -u options

Wed Jun 14 18:49:20 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/soundex.c: edited RCS cruft

Wed Jun 14 18:31:38 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/Setup.in: new modules soundex.c and environment.c

Wed Jun 14 18:28:08 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/socketmodule.c: add setblocking(); NT changes;
	null-terminate Unix path

Wed Jun 14 18:23:17 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/timingmodule.c: removed rcs cruft

Wed Jun 14 18:17:37 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/mathmodule.c: NeXT doesn't like me to declare
	hypot(double, double)

Wed Jun 14 18:07:26 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Python/importdl.c: re-enabled NeXT dynamic linking (#ifdef
	NeXT)

Wed Jun 14 14:26:02 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Parser/tokenizer.c: replace "\r\n" with "\n" at line end (Jim
	Ahlstrom)

Wed Jun 14 10:54:25 1995  Jack Jansen  <jack@cwi.nl>

	* Python/importdl.c: Mac dynloading is now enabled by
	USE_MAC_DYNAMIC_LOADING. Mac dynloading changed to allow
	multiple modules to live in with each other in the same file.

Wed Jun 14 10:47:21 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: Added USE_* ifdefs for a couple of optional
	modules.

Wed Jun 14 10:44:17 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macshlglue.c: Ported to CW6

Wed Jun 14 10:43:41 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/mwerks/mwerks_{,no}shared_config.h: Split shared-library
	support and dynamic-loading support (they were both enabled with
	USE_SHARED_LIBRARY, now there's also USE_MAC_DYNAMIC_LOADING).
	Added a few other USE_ defines for optional modules to nonshared
	config (they're not included in the base shared library)

Tue Jun 13 07:19:48 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/rfc822.py: Skip old-style 'From name time' lines at
	beginning of message.

Mon Jun 12 11:51:34 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Python/importdl.{h,c}: Check if we've already loaded a dynamic
	module under a different name.

Mon Jun 12 11:51:29 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Python/import.c: Check if we've already loaded a dynamic
	module under a different name.

Fri Jun  9 16:39:24 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/{mactcp/macdnrmodule.c,macstat.h,macmodule.c}: Ported to
        CodeWarrior 6

Sat Jun  3 17:16:40 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/config.c: Added img stuff (within #ifdef, so they're easy
	to remove)

Sat Jun  3 17:15:50 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macfs/macfsmodule.c: StandardGetFile without args now
	shows all files (in stead of none)

Wed May 17 07:18:20 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Lib/irix5/CL.py: Backward compatibity module for constants
	from cl.h include file. The values are gotten from the cl
	module. CL_old is there in case cl doesn't exist.

Wed May 17 07:16:52 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Modules/clmodule.c: Make constants from cl.h include file
	available as module variables. Also added Irix 5.3 constants.

Fri May  5 11:54:14 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Lib/ftplib.py: don't show print passwords in debug output

Thu May  4 11:02:18 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/ftplib.py: For anonymous ftp, make sure local hostname is
	fully qualified.

Wed May  3 13:40:23 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Modules/stropmodule.c: unified join(fields), split(fields)

Fri Apr 28 17:28:02 1995  Guido van Rossum  <guido@cnri.reston.va.us>

	* Include/rename2.h: removed duplicate defs for None, False,
	True

Tue Apr 25 07:53:24 1995  Sjoerd Mullender  <sjoerd@cwi.nl>

	* Include/{object.h,tupleobject.h}: DL_IMPORT needs an argument.

Mon Apr 24 08:41:41 1995  Jack Jansen  <jack@cwi.nl>

	* Mac/macglue.c: - The prefs file wasn't updated correctly if it
	already existed. - Guido's r1.23 fix wrt PyMac_DoYieldEnabled
	had somehow gotten lost.

Sun Apr 23 18:12:47 1995  Jack Jansen  <jack@cwi.nl>

	* Objects/fileobject.c: MW does not always set errno on failing
	fopen()

Sun Apr 23 18:10:18 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/mac/dbmac.py: Removed seeks beyond eof (MW doesn't support
	them)

Sun Apr 23 18:06:57 1995  Jack Jansen  <jack@cwi.nl>

	* Lib/py_compile.py: Mac-specific code for setting filetype was
	outdated.

Sun Apr 23 18:06:05 1995  Jack Jansen  <jack@cwi.nl>

	* Include/{object.h,tupleobject.h}: DL_IMPORT macro was called in
	a funny way (and MW barfed on it)

=================================
==> Release 1.2 (10 Apr 1995) <==
=================================

Thu Apr  6 16:34:28 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/classobject.c (instancemethod_compare): change the way
	instance methods are compared -- don't apply cmpobject() to
	im_self but do a simple pointer compare

	* Objects/object.c: move counting of free'd objects (#ifdef
	COUNT_ALLOCS) from DELREF() to UNREF()

	* Include/object.h (_Py_ForgetReference()): add counting of free'd
	objects (#ifdef COUNT_ALLOCS)

Tue Apr  4 13:53:47 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/frameobject.c (newframeobject): changed dictlookup()
	with constant C string arg to mappinglookup() with static Python
	string (Sjoerd)

Fri Mar 31 12:26:03 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* irix5/tmp/lib/python/lib/frozenmain.c: carried through renaming
	phase 3

Thu Mar 30 11:44:23 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* README: added warning about bash bug in certain Slackware Linux
	version

	* Doc/lib*.tex: reorganized into more subject-related chapters;
	rewritten abstract and introduction

	* Doc/myformat.sty: define \dfn{} as \em instead of \sl

	* Modules/config.c.in: moved decl of realmain() out of #ifdef

	* Python/pythonrun.c (print_error): added fflush(stdout) to
	print_error() so output doesn't get mangled when stdout and stderr
	are redirected to the same file

	* Modules/selectmodule.c: fix subtle refcnt bugs with fd2obj
	arrays (R Lindsay Todd)

	* Include/object.h, Object/{tupleobject.c,stringobject.c},
	Python/ceval.c: fix ref-count debugging (R Lindsay Todd)

	* Python/sysmodule.c (sys_checkinterval): initialize to 10 as
	before (major speed up!)

	* Modules/cdmodule.c: use newgetargs; removed sbtoa() and
	timetoa(); added msftoframe(); added constants that used to be in
	standard module CD (Sjoerd)

	* Modules/posixmodule.c: added WNOHANG constant

Fri Mar 24 14:55:48 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/nntplib.py: rename debug() to set_debuglevel() as for
	ftplib.py

Thu Mar 23 11:10:24 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/posixfile.py (open): make mode default to 'r' and add
	optional bufsize

========================================
==> Release 1.2 BETA 4 (21 Mar 1995) <==
========================================

Tue Mar 21 13:28:32 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/ceval.c (call_object): removed #ifdef'ed out code

Mon Mar 20 17:14:14 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/copy.py (_copy_dispatch): fix typo in hasattr() exprs

Sat Mar 18 00:04:14 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Makefile.in: change -f Makefile.in to -f $(srcdir)/Makefile.in

Fri Mar 17 10:52:07 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/tkinter/Tkinter.py: add TkVersion and TclVersion variables;
	handle crash in callback different (don't drop into debugger); add
	_getdoubles() and streamline _getints()

	* Doc/lib*.tex: mass update

	* Doc/partparse.py: fix several small things so it doesn't crash
	so easily

	* Modules/threadmodule.c: change exit_thread so it raises
	SystemExit -- this allow proper cleanup in t_bootstrap

	* Makefile.in (distclean): add -f Makefile.in (John Interrante)

Thu Mar 16 13:35:25 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Doc/ref*.tex: made palatable to latex2html -- basically rewrote
	all math using \code{} and \var{} (and pow() and some integer
	literals), and added braces to some \item[]s containing \tt

	* Modules/socketmodule.c: fixed up comments describing interface

	* Lib/test/test_signal.py: new module to test signal module

Wed Mar 15 11:07:43 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Modules/signalmodule.c (PySignal_Signal): use PyCallable_Check
	where suitable; split some lines

	* Lib/posixfile.py (open) defaults mode='r', bufsize=-1

Tue Mar 14 10:42:39 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/copy.py: rename copy.Error to copy.error

	* Lib/cgi.py: correct some typos that broke escape() and print_form()

	* Lib/string.py: add (unsupported) optional base argument to
	atoi() and atol(); be more careful about very negative start
	indices in [r]find() and count()

	* Modules/timemodule.c: tiny additions for Windows 3.1

	* Modules/gdbmmodule.c: plugged some memory leaks (Steve Clift)

	* Modules/socketmodule.c (makefile): made mode optional and added
	optional buffer size, like built-in open()

Mon Mar 13 11:26:20 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/pickle.py: added ability to pickle classes (could be used
	for exceptions in RPC); made format_version non-hidden variable,
	added compatible_formats variable, added shorthand functions
	dump(), load(), dumps() and loads() -- similar to marshal

	* Python/pythonrun.c (fatal): In NT, write msg to debugging device

	* Doc/lib*.tex: small changes by Soren Larsen

Thu Mar  9 15:06:02 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/pickle.py: added explicit exception for unpicklable object
	type: PicklingError; raise EOFError when end of file read

	* Lib/profile.py: runcall(): return the function's return value

	* Lib/rexec.py: support calling __import__ with 4 args

	* Lib/shelve.py: fix typo in close() (self.db should be self.dict)

	* Python/{ceval.c,marshal.c}: optimized many calls to get/set
	tuple items

	* Include/{tupleobject.h,rename2.h}: added SETTUPLEITEM macro and
	added cast to GETTUPLEITEM

	* Objects/{stringobject.c,mappingobject.c}: a few peephole
	optimizations

	* configure(.in): added test for CC value not matching cache

	* Modules/tkintermodule.c: add casts to malloc() calls in
	tkintermodule.c

	* Moved Demo/bgen, Demo/freeze, Demo/modulator and most of
	Demo/script to new Tools/ directory

	* Doc/ext.tex: revised for new naming; added new section on
	reference counting

	* Doc/lib*.tex: revised much of the library documentation

	* Doc/ref*.tex: corrected typos and other small errors in the
	reference manual

	* Doc/tut.tex: corrected typos and small errors, and added a
	chapter on new features in release 1.2

	* Extensions/X11: MANY (incompatible) changes by Sjoerd

	* Most header files, Include/allobjects.h: changed the way
	DL_IMPORT is used -- it now has the object's type as a parameter
	(this is done for Borland C)

	* Many places: small changes for MPW and CFM-68K on the Mac

	* Include/mymath.h: new header to be used instead of <math.h>

	* Include/pythonrun.h: added decl for Py_FatalError()

	* Include/rename2.h: added PyImport_ExecCodeModule

	* Lib/cgi.py: general cleanup; translate & to "&amp;"

	* Lib/{compileall.py,tb.py,traceback.py}: don't break on class
        exceptions

	* Lib/types.py: added DictType as alias for DictionaryType

	* Lib/cddb.py: write track artist info if given

	* Lib/{pdb.py,wdb.py,stdwin/wdbframewin.py}: don't break on class
	exceptions; added runeval(), generalized run to allow optional
	context; deprecate runctx()

	* Lib/test/{test_b1.py,test_grammar.py}: cope with 'math' not
        existing; don't fail if overflow check doesn't work

	* Mac/*: too many changes to log; we now support about 5 compilers
	(Think C, MPW, MPW with Symantec C, CodeWarrior 68K, CodeWarrior
	PPC)

	* Misc/python-mode.el: cope with triple-quoted strings (sez Barry)

	* Modules/Makefile.pre.in: don't exit Make if 'sharedmods' for
        loop fails

	* Modules/Setup.in: move posix, signal, thread and gl permanently
	ahead of #*noconfig*, to avoid confusion

Mon Feb 20 13:48:50 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/stringobject.c (formatstring): allow string without
	formats and dictionary argument

Fri Feb 17 12:00:29 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/bltinmodule.c (do_pow): fixed bogus test for negative
	number to the float power

	* Python/ceval.c (eval_code): fix SystemError in try-finally when
	a class exception was raised

	* Demo/stdwin/python.py, Lib/stdwin/wdbframewin.py, Lib/pdb.py,
	Lib/tb.py, Lib/traceback.py: cope with class exceptions when
	printing or formatting them (R Lindsay Todd)

Thu Feb 16 11:21:45 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Doc/libshelve.tex: added/reorganized list of restrictions

	* Doc/libsocket.tex: added quick list of new exported symbols

	* Demo/sockets/{mcast.py,broadcast.py}: don't use modules SOCKET
	or IN -- all symbols are now exported by the socket module itself

	* Modules/socketmodule.c (initsocket): added INADDR_* symbols

	* Include/object.h: added missing decls for PyObject_IsTrue() and
	PyCallable_Check()

Wed Feb 15 14:43:24 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/compile.c (com_addopname): use = instead of == for
        assignment

	* Modules/config.c.in (COMPILER): removed bogus ## in front of
	__VERSION__

	* Doc/{lib.tex,libpickle.tex,libcopy.tex,libshelve.tex}:
	documented some new modules (cheaply -- by slightly reformatting
	their __doc__ strings)

	* Lib/builtin.py: got rid of it

	* Doc/tut.tex: added sections on new stuff in release 1.2

	* Doc/libsignal.tex: added a lot more details about how this
	works.

Tue Feb 14 13:57:28 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/marshal.c (w_object): change long i, n to int -- should
	solve GCC problems on DEC Alpha (Paul Sijben)

	* Python/{ceval.c,bltinmodule.c}: call __import__ with 4
	arguments: modulename, globals, locals, list_of_from_names_or_None
	(for Ken Manheimer)

	* Python/ceval.c (eval_code): call locals_2_fast before doing
	import from (Jim Roskind)

========================================
==> Release 1.2 BETA 3 (13 Feb 1995) <==
========================================

Mon Feb 13 12:39:16 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* README: removed remark on NeXT and -posix since this is now done
	by configure

	* Mac/config.c, Modules/config.c.in (getversion): tack compiler
        name and version (where known) onto version string

	* Objects/floatobject.c: work-around for NeXT Sparc 3.3 prerelease
	(Barry Warsaw)

Fri Feb 10 17:08:35 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/object.c (newvarobject), Include/objimpl.h: make size
        argument signed

	* Include/allobjects.h, several other files: introduce
	Py_CHARMASK(c) which expands to c&0xff, or just c if characters
	are unsigned.  This should fix problems with passing negative
	values to isspace() and friends for characters > 0x7f on systems
	where 'char' is signed

Thu Feb  9 10:26:21 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/copy.py: added __doc__ strings

	* Lib/shelve.py: added __doc__ strings

	* Lib/anydbm.py: added __doc__ strings and test for gdbm

	* Include/longintrepr.h: remove untrue comment about
	signed/unsigned ob_size

	* Modules/mpzmodule.c (mpz_div_and_mod): add proper casts (Jim
	Fulton)

Wed Feb  8 15:48:24 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/bltinmodule.c (do_pow), Objects/floatobject.c
	(float_pow): move check for negative float to the float power to
	the pow() function, so negative float to the integer power can be
	implemented correctly (after coercion to float)

Tue Feb  7 10:14:34 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/import.c (init_frozen): make it non-static, so
	frozenmain.c can use it.  Also remove the reference to
	frozenmain.o from Python/Makefile.in

	* Doc/{ref6.tex,ref7.tex} (raise, except): describe classes and
	instances used as exceptions (R Lindsay Todd)

	* Lib/test/test_exceptions.py: added tests for raising classes (R
        Lindsay Todd)

	* Python/ceval.c (exec_statement): DECREF result of run_string
	(Mark Lutz)

	* Modules/cursesmodule.c: patches to clear errors between failing
	calls to Arg_Parse (Steve Clift)

Fri Feb  3 13:48:12 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Lib/bdb.py (format_stack_entry): append () to function name if
        no __args__

	* Lib/pdb.py (print_stack_entry): default prompt_prefix is
        line_prefix, and use the default everywhere

Thu Feb  2 15:27:15 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/pythonrun.c (print_error): print class name for
	exceptions that are classes (R Lindsay Todd)

	* Modules/tkintermodule.c: use PyCallable_Check instead of
	manually checking for some callable types for callbacks; export
	TK_VERSION and TCL_VERSION strings; a few Tk 4.0 specific changes

	* Modules/socketmodule.c (initsocket): added a long list of socket
	related constants -- better here than in a separate python module,
	because the values change per system (R Lindsay Todd)

	* Doc/{lib.tex,libsignal.tex}: added documentation for signal
	module (Andrew Kuchling)

Tue Jan 31 13:06:59 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Include/pythonrun.h: remove declaration of (now static)
	run_pyc_file

	* Modules/posixmodule.c (posix_utime): correct typo in utime()
	stub

Tue Jan 31 11:02:00 1995  Guido van Rossum  <guido@guppie.cwi.nl>

	* Modules/{pwdmodule.c,grpmodule.c} (mkpwent, mkgrent): NeXT
	specific patch for little endian machines where the uid and gid
	are in the wrong place in the structure (Mike Carlton)

Mon Jan 30 16:17:33 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* configure.in: add -posix to definition of CC when detecting Next

Mon Jan 30 13:32:07 1995  Guido van Rossum  <guido@guppie.cwi.nl>

	* Mac/*: not clearly logged are lots of changes to the Mac
	specific modules, e.g. reworking of the interrupt detection code
	and general reorganization of macglue.[ch], as well as support for
	modules generated by "bgen" (see Demo/bgen), and subsequent
	removal of the resource and sound interfaces from MacOS (since
	they now have their own, complete, generated interface), and also
	lots of development on the mactcp and macfs front

	* Modules/stdwinmodule.c (initstdwin): disable python's own event
	processing on the mac as soon as stdwin is imported; removed some
	unused variables

	* Parser/intrcheck.c: moved all mac specific stuff to
	Mac/macglue.c

	* Python/pythonrun.c (goaway): Think C mod to suppress pausing at
        normal exit

	* Python/import.c (imp_get_magic): fix glaring indexing bug

	* Modules/dbmmodule.c (dbm_keys): fix memory leak and tighten
	error checking (and redo lay-out)

Fri Jan 27 00:00:17 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Objects/listobject.c: round up item count on resize to improve
	realloc performance (dramatic effect in the Mac with Think C!)

	* Include/{rename2.h,methodobject.h}, Objects/methodobject.c:
	added support for chaining method lists: Py_FindMethodInChain

Thu Jan 26 12:59:51 1995  Guido van Rossum  <guido@guppie.cwi.nl>

	* Python/Makefile.in: removed frozenmain.o from OBJS -- it has no
	business being in libPython.a.  (Still build it though.)

Thu Jan 26 00:42:29 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Lib/mhlib.py: fix bogus test for matching regex

	* stdwinmodule.c: (re)move some unused variables

	* Python/pythonrun.c (run_pyc_file): made static
	(fatal): loop forever on Mac, so error message remains visible

	* Python/import.c (doneimport): no need to dictclear() the
	module's dictionary (that's done automatically when the module is
	actually deleted)

	* Objects/classobject.c (instancebinop): removed unused variables

	* Objects/moduleobject.c (module_dealloc): explicitly erase a
	module's dictionary when the module object disappears -- this was
	formerly done in import's doneimport()

	* Objects/object.c, Python/bltinmodule.c: moved callable() to
	object.c (from static in bltinmodule.c) since it is generally
	useful (and I needed it :-); removed some unused vars

Wed Jan 25 13:20:52 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Modules/posixmodule.c (posix_utime): Be more robust in the light
	of unusual types for uname struct members and 64-bit longs

	* Python/ceval.c (eval_code): mods to allow using classes as
        exceptions (R Lindsay Todd)

Mon Jan 23 20:48:16 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* configure.in (LDSHARED): add case for OSF/1 (Bob Kras);
	(socket libraries): add conditional for IRIX 5, where -lsocket
	exists but doesn't seem to work properly

	* Python/compile.c (get_docstring): add missing case for
	file_input, so __doc__ strings in modules work

Sun Jan 22 20:45:40 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Modules/regexmodule.c (reg_dealloc): free the compiled pattern
	buffer -- plugs a memory leak

Sun Jan 22 01:44:01 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Modules/signalmodule.c (sigcheck): renamed to PyErr_CheckSignals
	-- signal checking was broken because of this!

Sat Jan 21 15:10:08 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Python/getargs.c (seterror): don't overwrite error if one is
	already set (e.g. by O& handler)
	(convertsimple1): return "(unspecified)" instead of empty string
	for type description of "O&" object

Fri Jan 20 15:27:51 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Modules/Makefile.pre.in (sharedinstall): add command to make the
	$(DESTSHARED) directory

	* README: change NeXT hint to add -posix to C compiler flags

	* Python/import.c: document the fact that almost all functions
	returning a module object (except add_module()) increment its
	reference count, and add missing INCREF calls here and there

	* Python/bltinmodule.c (builtin___import__): don't INCREF the
	module -- import_module() has already done that

	* Python/ceval.c (eval_code, RAISE_EXCEPTION): add missing INCREF
	after gettupleitem() call (R Lindsay Todd)

	* configure.in: added check for working getopt (R Lindsay Todd);
	modernize all tests to use cache and report outcome (John
	Interrante)

	* Include/{classobject.h,listobject.h}: corrected two unconverted
	names (found by John Interrante)

Thu Jan 19 01:31:46 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* configure.in (LDSHARED): added case for Sequent DYNIX (Jaap
	Vermeulen)

	* Mac/macglue.c (Pstring): truncate string to 255 bytes

	* Objects/listobject.c (list_dealloc): Fix NULL dereference in
	case of out-of-memory condition (Jack)

	* Parser/intrcheck.c (intrpeek): new Mac specific routine to test
	for interrupt without clearing the interrupt flag (Jack)

	* Python/errors.c (strerror): #undef it first on the Mac (Jack)

	* Lib/ftplib.py: don't break if os.environ doesn't exist (Jack)

	* Modules/timemodule.c (inittime): fix memory leaks (should decref
	new objects passed to dictinsert)

	* Python/compile.c (optimize): fix memory leak (forgot to decref
        localmap)

	* Objects/funcobject.c (func_dealloc): fix memory leak (forgot to
	decref func_name)

	* Python/importdl.c: added changes for NetBSD dynamic linking
	(David Hobley); removed shared linking for NeXT (incompatible with
	the -posix flag)

	* Modules/mathmodule.c: removed empty #ifdef macintosh...#endif

	* Parser/parsetok.c (parsetok): avoid uninitialized memory read

	* Mac: various stuff to port Jack's mods back to THINK C, as well
	as my own changes for apple events

	* Python/modsupport.c: support "O&" taking an object constructor
	and a void* (sort of inverse of O& in getargs)

	* configure.in, Makefile.in: mods to define and use
	INSTALL_PROGRAM and INSTALL_DATA as well as INSTALL (John
	Interrante)

Wed Jan 18 12:01:20 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Mac: lots of new stuff checked in by jack

	* configure.in: added test for genuine getopt (R Lindsay Todd)

	* Python/Makefile.in: removed getopt.o from OBJS (but left in
	getopt.o: getopt.c rule)

	* Python/getopt.c: don't use function prototypes (Anthony Baxter)

	* Modules/arraymodule.c: make the routines static now that their
	forward declarations are! (Anthony Baxter)

========================================
==> Release 1.2 BETA 2 (17 Jan 1995) <==
========================================

Tue Jan 17 11:24:23 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Include/patchlevel.h: set version to 1.2-beta-2

	* Python/Makefile.in: added getopt to list of objects

	* Makefile.pre.in: be more careful about building 
	Modules/Makefile.pre

	* Objects/floatobject.c: test for __STDC__ instead of macintosh de
	decide whether to declare fmod() and pow() -- this works in
	mathomodule.c so why not here...

	* Objects/rangeobject.c: made a few things static

	* Objects/longobject.c, Include/{longobject.h,rename2.h}:
	long_scan is now a macro that calls long_escan; long_scan no
	longer exists

	* Objects/object.c (strobject): use tp_str and only try __str__ if
	it's an instance

	* configure.in: hopefully final changes for Sequent's -linet

	* README: add hint for NeXT users to use --without-gcc

	* Python/{bltinmodule.c,ceval.c}, Objects/frameobject.c:
	initialize __builtins__ from built-in *module* instead of *dict*,
	to prevent interactive vars() call to loop recursively

	* Python/bltinmodule.c: fix Alpha bug in range and xrange --
	sizeof(int) != sizeof(long)

	* Python/mystrtoul.c: include rename2.h

	* Modules/*: made things static and general clean-up for new
	naming scheme

	* Include/*.h: new names for lots of new functions

	* Lib/rexec.py: no need for distrusting dir() or vars(), changed
	open() to allow everything (for reading) except /etc/*

	* Mac/macmain.c: include rename2.h

	* */Makefile*in: added harmless $& to $(LIB) target for Sequent
	parallel make

	* Parser/tokenizer.c: fix loop on unterminated triple quotes

	* Parser/intrcheck.c: made 'interrupted' flag static again

	* Objects/listobject.c (list_ass_slice): free recycling bin when
	making early exit due to memory error

	* Objects/listobject.c, Include/{listobject.h,rename2.h}: added
	reverselist, C interface to list.reverse().

	* Object/listobject.c (list_ass_slice): fixed re-entrancy bug
	(noticed by Jim Roskind) 

Sat Jan 14 11:21:29 1995  Guido van Rossum  <guido@zeus.cwi.nl>

	* Python/modsupport.c (PyEval_CallMethod): changed method argument
	name to methodname -- since method is also a typedef and some
	compiler choke on this (e.g. HP) (Andrew Kuchling)

	* Python/thread.c: added #include thread_nt.h (Mark Hammond)

	* Demo/scripts/h2py.py: support $include or $INCLUDE path instead
	of only using /usr/include (Mark Hammond)

	* Python/ceval.c (eval_code/PRINT_EXPR): fix messed output when
	x.__repr__() prints something and repr(x) is called at the prompt

========================================
==> Release 1.2 BETA 1 (12 Jan 1995) <==
========================================

Thu Jan 12 12:27:23 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/pythonrun.c (initmain), Python/import.c
	(exec_code_module): use getbuiltins(), not getbuiltindict() to
	initialize new modules

	* Python/ceval.c (getbuiltins): return getbuiltindict() instead of
	NULL if no current frame

	* Modules/cryptmodule.c: removed redundant include of modsupport.h

	* Modules/signalmodule.c: remove unwanted trigraph from comment

	* Modules/Setup.in: clarify status of dlmodule.c

	* Objects/object.c (cmpobject): properly implement cmp() for class
        instances

Wed Jan 11 10:56:12 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* README: removed references to --with-svr4; added docs for
	--without-gcc

	* Modules/mathmodule.c: rearrange declarations somewhat

Tue Jan 10 11:34:23 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Include/*.h, Python/getmtime.c, Modules/<several>.c: THE GREAT
        RENAMING (inspired by Jun Hamano).  One now either includes
	"Python.h" and then uses new names only, or one includes
	"allobjects.h" and uses old names.  "rename1.h" no longer exists;
	instead, "rename2.h" performs the reverse mapping.

	* Python/bltinmodule.c (builtin_filter): fix subtle refcount big
	in filter() (Tim MacKenzie)

	* Include/mymalloc.h, Modules/{Makefile.pre.in,config.c.in}:
	change to make things palatable for C++ (Tim MacKenzie)

	* Modules/socketmodule.c: only call hstrerror() if it exists

	* Modules/tkintermodule.c: added interface to Tk_DoOneEvent() (R
	Lindsay Todd)

	* Objects/longobject.c (long_pow): some defensive programming
	(Eric Siegerman)

	* Objects/intobject.c (int_pow): fix memory leak in ternary pow()
	(Eric Siegerman)

	* Modules/posixmodule.c (posix_fdopen, posix_popen): add optional
	argument to specify buffer size as for __builtin__.open(); also
	make mode argument optional (default "r")

	* Objects/classobject.c (instance_coerce): implement coercions
	involving instances properly

	* Objects/object.c, Python/bltinmodule.c: moved coerce() to
	objects.c, where it belongs

	* Doc/libfuncs.tex: added execfile(); reformulated eval() somewhat

	* Python/bltinmodule.c (builtin_{execfile,eval}): fix
	globals/locals defaults to match the manual again; also allow None
	to mean the same as the default

	* Lib/nntplib.py: fix comments for list command (should be last,
	first instead of first, last)

	* Lib/test/test_grammar.py: fix exec test so presence of
	__builtins__ doesn't break it

Mon Jan  9 14:20:16 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/{funcobject.c,methodobject.c,classobject.c}: don't
	expose certain internals (e.g. __dict__) in restricted mode.

	* Python/thread_pthread.h: Alpha OSF/1 fix

	* Python/importdl.c (load_dynamic_module): removed bogus check for
	reloading of dynamically loaded modules (tested uninitialized
	local variable)

	* Include/{frameobject.h,ceval.h,bltinmodule.h,rename1},
	Python/{ceval.c,import.c,pythonrun.c,bltinmodule.c},
	Object/frameobject.c: changed handling of builtins.  Each frame
	now has a pointer to the dictionary of builtins to be used in that
	frame, initialized from __builtins__ in the globals passed to the
	frame.  Only run_node() and exec_code_module() initialize
	__builtins__ to the dictionary of the real __builtin__ module.
	Furthermore, a frame is in "restricted" mode if its builtins are
	not the real __builtin__ module.  In restricted mode, some other
	modules and object types restrict their interfaces.  Subtle
	change: eval_code() no longer automatically fills in the default
	globals; this must be done by the caller (who can then also
	explicitly stick in the builtins if needed).  bltinmodule.c no
	longer exports {get,set}builtin() but instead exports
	getbuiltindict().  ceval.c export getbuiltins() and
	getrestricted() in analogy of getglobals().

	* Include/sysmodule.h, Python/{sysmodule.c,ceval.c},
	Doc/libsys.tex: change sys.check_interval Python variable into
	Python function sys.setcheckinterval(interval) and C variable
	sys_checkinterval

	* Mac/macosmodule.c: use new getargs interface; add
	{Get,Set}FileInfo

Sat Jan  7 09:40:24 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/compile.c: support import A.B...Z; added doc strings to
	modules, classes and function

	* Python/ceval.c: use new instancebinop interface

	* Python/bltinmodule.c: restructured coerce(), divmod(), pow() to
	use new instancebinop interface

	* Objects/classobject.c: added 5th (function) parameter to
	instancebinop, to support things like Rational * float; added
	documentation strings to classes and methods

	* Objects/methodobject.c: changed drastically, the object now
	contains a pointer to the struct methodlist (which must be
	static); added attributes __name__, __doc__ and __self__

	* Objects/funcobject.c: added __doc__ attribute (alias func_doc),
	initialized from first constand in code object if it is a string,
	else to None

	* Objects/moduleobject.c: initialize __doc__ to None

	* Objects/typeobject.c: added getattr(), supporting __doc__ and
	__name__

	* Objects/object.c: raise AttributeError, not TypeError for object
	without attributes

	* Python/modsupport.c, Include/modsupport.h: add doc string
        parameter to initmodule3 (renamed from initmodule2); new
	newmethodobject() interface

	* Modules/signalmodule.c (initsignal): don't call
	newmethodobject() directly -- rely on initmodule()

	* Modules/newmodule.c: rationalize argument checking, redo
	lay-out, add __doc__ strings

	* Include/object.h: added tp_str (to implement str()), tp_doc, and
	some dummy fields

	* Include/methodobject.h: added ml_doc member to struct methodlist
	and renamed ml_varargs to ml_flags; changed newmethodobject() to
	take a struct methodlist * argument instead of individual parts;
	got rid of ML_FREENAME again

	* Include/funcobject.h: added func_doc struct member

	* Include/classobject.h: added 5th (function) parameter to
	instancebinop, to support things like Rational * float

	* Grammar/Grammar: changed import to support NAME.NAME...NAME

	* Python/importdl.c (load_dynamic_module): NT dlls have extension
	.pyd, not .dll

Thu Jan  5 11:00:13 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Demo/scripts/mboxconvert.py: invent Message-ID if none present

Wed Jan  4 18:23:09 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/modsupport.c (initmodule2), Include/methodobject.h,
	Objects/methodobject.c: introduced METH_FREENAME bit passed to
	newmethodobject to indicate that if the object is freed the name
	pointer must also be freed (this saves a long standing memory leak
	in initmodule2)

	* Modules/structmodule.c (struct_pack, struct_unpack): use memcpy
	instead of double precision assignment (since a string isn't
	always double-aligned, e.g. when debug fields are present in the
	object header)

	* Objects/floatobject.c (float_hash): changed a constant to avoid
	float->long conversion overflow

	* Python/bltinmodule.c (builtin_pow): fix coerce() ref count
	nightmare (core dumps on Linux)

	* Python/pythonrun.c: call flushline() in print_error(), after
	fetching the exception info, since flushline() can mask an
	exception; move flushline() calls around so they are not between
	the detection and printing of the exception

Tue Jan  3 12:55:28 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Modules/config.c.in (getcopyright): Change copyright to include
	1995

Mon Jan  2 20:15:39 1995  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/mappingobject.c (mappingremove): don't call
	lookmapping() for empty dictionary

	* Doc/libsocket.tex (section{Built-in Module \sectcode{socket}}):
	documented gethostbyaddr()

	* Modules/mpzmodule.c (mpz_power): made it ternary

	* Modules/mathmodule.c: only use hypot() if it exists

	* Modules/Makefile.pre.in (sharedinstall): fix bug (sh can't loop
	over empty list) when $(SHAREDMODS) is empty

	* Python/errors.c: added hook for better mac error messages

	* Python/pythonrun.c (run_script): removed extraneous fclose() in
        case of .pyc file argument

	* Include/{object.h,stringobject.h}: changed refcnt and sizes from
        unsigned to int (i.e. signed)

	* Objects/fileobject.c (newfileobject): use HAVE_FOPENRF instead
	of USE_FOPENRF

	* Lib/test/test_b1.py: test eval() and execfile() with globals,
	locals arguments

	* Lib/mhlib.py: added movemessage(), copymessage(), added copy
	fallback for refilemessages(), and updated the docs

Fri Dec 30 16:19:17 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Parser/tokenizer.c (tok_nextc): zap tok->buf after freeing

	* Include/traceback.h: added struct _frame declaration for ANSI C

	* Include/bitset.h: move definition of testbit() around

Thu Dec 29 10:09:25 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/mappingobject.c (mapping_has_key): don't call
	lookmapping() for empty dictionary

	* Modules/Makefile.pre.in: use new style @prefix@ substitution
	(sharedinstall): fix case of loop over empty $(SHAREDMODS)

	* Several files: removed redundant variables etc. (Sam Leffler)

Wed Dec 28 12:09:10 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Modules/threadmodule.c (t_bootstrap): XDECREF the return value;
        (thread_exit_thread): DECREF the frame returned by save_thread()

	* Modules/md5module.c, Doc/libmd5.tex: renamed md5.md5() to md5.new()

Wed Dec 21 13:30:47 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/ceval.c (build_class): add hook for Donald Beaudry

Mon Dec 19 17:35:13 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Doc/libposixfile.tex: the fileopen function was erroneously
	documented as openfile

Tue Dec 13 11:46:03 1994  Guido Van Rossum  <guido@tesla>

	* config.h.in, configure: rewritten *by* autoconf 2.0

	* configure.in: parts rewritten for autoconf 2.0; strip spaces
	from uname output for QNX; test for some new things like
	ftruncate, truncate and va_list as array

	* acconfig.h: some reordering to get things in alphabetical order;
	added GETTIMEOFDAY_NO_TZ and VA_LIST_IS_ARRAY

	* README: Added SCO notes

	* Python/thread_solaris.h (start_new_thread): create new threads
	with THR_DETACHED option instead of THR_NEW_LWP -- else there's a
	limit to the number of threads you can create in total, ever, per
	process

	* Python/traceback.c (tb_print): don't store in sys.last_traceback
	(that's done in pythonrun.c:print_error() now)

	* Python/pythonrun.c (print_error): use fatal() instead of
	abort(); use err_fetch() instead of err_get(); call tb_print()
	instead of going through ceval.c:printtraceback()

	* Python/modsupport.c: fix vmkvalue() for systems where va_list is
	an array; add support for creating lists and dictionaries; added
	convenience functions for calling functions/methods with format
	and argument list

	* Python/marshal.c (rd[s]_object): add trap for calls while an
	exception condition is still set

	* Python/{import.c,importdl.c}: completely restructured: moved
	all dynamic loading stuff to importdl.c; added public interface
	to the functionality through module 'imp' (for __import__ hack)

	* Modules/threadmodule.c (t_bootstrap): fix leak of result value
	(still a massive leak left I think)

	* Python/errors.c: don't declare strerror on NT

	* Python/getargs.c (vgetargs[1]): fix for systems where va_list
	is an array

	* Python/compile.c: use fatal() instead of abort(); use
	err_{fetch,restore}

	* Python/ceval.c: move some (X)DECREF's around for improved
	re-entrancy; call built-in __import__ to implement IMPORT_NAME;
	use err_{fetch,restore}; fix call to __rshift__ in __lshift__;
	check for string left arg before anything else in rem()

	* Python/ceval.c, Include/ceval.h: get rid of printtraceback

	* Python/bltinmodule.c: added __import__ built-in function;
	restructured argument parsing of most built-ins to use
	newgetargs()

	* Python/Makefile.in: add importdl.o to OBJS; special-case
	compilation of importdl.c instead of import.c

	* Parser/{pgen.c,parser.c,grammar.c}: use fatal() instead of abort()

	* Objects/object.c: use fatal() instead of abort()

	* Objects/mappingobject.c: fix re-entrancy bugs (allow ma_table
	and ma_size to be 0)

	* Objects/listobject.c: fix some re-entrancy bugs (not complete)

	* Objects/frameobject.c: use err_{fetch,restore} everywhere; use
	fatal() instead of abort()

	* Objects/fileobject.c (file_truncate): new method (only of
	ftruncate() is in libc)

	* Objects/classobject.c (instance_getattr): add err_clear() when
	retrying after failing instance_getattr1() call; use
	err_{fetch,restore} everywhere

	* Modules/tkintermodule.c: use PyErr_{Fetch,Restore} instead of
	{GetAndClear,SetObject}; fix NULL dereference in TimerHandler

	* configure.in, Modules/timemodule.c: on some systems,
	gettimeofday() has no second argument

	* Modules/socketmodule.c: if O_NDELAY undefined, use O_NONBLOCK
	(for QNX); use gethostbyname_r if it exists (since it is
	re-entrant); use h_error and hstrerror when they exist; other
	changes for re-entrancy; make printable representation more
	useful; cosmetic changes in argument lists; add gethostbyaddr()

	* Modules/signalmodule.c: if NSIG undefined, use _SIGMAX + 1

	* Modules/posixmodule.c: changes for direct/dirent dictated by
	autoconf 2.0

	* Modules/config.c.in: added standard built-in module "imp"

	* Modules/{Makefile.pre.in,makesetup}: change @...@ to _..._

	* Makefile.in: adapted to autoconf 2.0; treat prefix in a standard
	way, remove config caches in distclean target

	* Lib/tkinter/Tkinter.py (Pack.propagate): fix calling convention

	* Lib/test/test_b2.py: test reload() of built-in module (marshal)

	* Lib/test/{test_b1.py,testall.out}: added test for __import__

	* Include/rename1.h: change HEAD_INIT to macro with argument

	* Include/import.h: added decl for get_pyc_magic()

	* Include/{rename1.h,errors.h}, Python/errors.c: added err_fetch()
	and err_restore(), get rid of err_get()

	* Include/bltinmodule.h, Python/bltinmodule.c (getbuiltins): new
	like getbuiltin() buit takes char * instead of stringobject *
	argument (for __import__ hack)

	* Doc/tut.tex: use spam, bacon and eggs instead of foo, bar, bletch

	* Doc/libtypes.tex (File Objects): add footnote
	explaining why readline() leaves the trailing newline in

Sat Nov 19 15:14:02 1994  Guido Van Rossum  <guido@tesla>

	* Objects/mappingobject.c: ma_table may now be NULL (when ma_size
	== ); changes to avoid re-entering the interpreter via DECREF
	while the mapping object is being modified

	* Several other places: similar

	* errors.[ch]: new functions err_fetch and err_restore
	fetch and restore all three exception related values (plus places
	using these)

	* Makefile.in (TESTPATH): Added ./Modules to test path so
	dynamically loaded modules are found even if not yet installed

Wed Nov 16 14:19:01 1994  Guido Van Rossum  <guido@tesla>

	* Python/sysmodule.c (list_builtin_module_names): stop a leak

Mon Nov 14 13:21:45 1994  Guido van Rossum  <guido@tesla>

	* Doc/ref[467].tex: don't use \verb{...} in footnotes; rewritten
	using {\tt ...}

	* Lib/urlparse.py (urljoin): safe version of Andy Bensky's fix to
	urllib.py

	* Lib/urllib.py (basejoin): (Andy Bensky) fix case where url has a
	type and a path but no host -- the host from the base should be
	inserted

	* Parser/grammar.c: (Don Beaudry) initialize accelerators print
	"Translating labels" header only if debugging

	* Doc/ref[36].tex: some typos

	* Doc/ref[35].tex: clarify reverse/backward quotes, add them to
	the index

===================================
==> Release 1.1.1 (10 Nov 1994) <==
===================================

Thu Nov 10 13:09:26 1994  Guido van Rossum  <guido@tesla>

	* Objects/classobject.c (instance_compare): don't ever raise an
	exception or return -2

	* Python/compile.c: stick "<lambda>" in function name instead of
	NULL or None

	* Doc/tut.tex: corrected a few typos

	* Modules/tkintermodule.c: added timer and file handler interfaces
	and made mainloop/quit global functions (as well still being tk
	methods)

	* Modules/newmodule.c: made it compile on SunOS4.1.3 (there were
	continuation backslashes on non-cpp lines :-)

	* Modules/gdbmmodule.c: fix some bugs (freed the wrong objects)

	* Modules/Setup.in: clarified some things a little in the comments

	* Modules/Makefile.pre.in (sharedinstall): don't fail if there
	aren't any shared modules

	* Include/structmember.h: include stddef.h (for offsetof)

	* Include/rename1.h: added PyArg_ParseTuple for newgetargs

	* Python/bltinmodule.c: fix core dump in pow() (should be declared
	varargs in methodlist array)

	* Python/ceval.c: replace abort() calls with fatal() calls

	* Python/errors.c (err_setval): call err_clear() to clear existing
	error instead of calling XDECREF

	* Python/getargs.c: fix core dump when old style call expecting
	some arguments receives none

	* Lib/test/{test_b[12].py,testall.out}: added more tests (now all
	built-ins are covered again)

Thu Oct 20 08:31:02 1994  Guido van Rossum  <guido@tesla>

	* Modules/makesetup: should use $cc not cc

	* configure.in, configure, config.h.in: test for presence of
        stddef.h

	* Include/structmember.h: include <stddef.h> if it exists

Wed Oct 19 11:45:35 1994  Guido Van Rossum  <guido@tesla>

	* Makefile.in: patch by Wolf-D. Ihlenfeld to use BINDIR etc

	* Lib/tkinter/Tkinter.py: added option_{add,clear,get,readfile} to
	Misc class

	* Lib/poly.py: fix bug in minus()

	* Modules/Setup.in: clarified optional SGI modules and improved
	template for using *noconfig*

	* Doc/Makefile: don't assum '.' is in $PATH

	* Modules/mathmodule.c, Doc/libmath.tex: add hypot()

	* Makefile.in: on libinstall, automatically run sharedinstall in
	Modules

	* Modules/Makefile.pre.in: always make sharedmods

	* Modules/makesetup: quote $ in two places

	* configure.in, acconfig.h.in, config.h.in, configure,
	Modules/posixmodule.c: separate arg requirements for getpgrp() and
	setpgrp()

	* Nt/Python/makefile.nt.mak: added getargs()

Thu Oct 13 07:51:03 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* README: removed misleading comment about example Setup.* files

=================================
==> Release 1.1 (11 Oct 1994) <==
=================================

Tue Oct 11 16:24:42 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* last-minute changes for SunOS 4.1.3: test for volatile in
	configure; add getargs.o dependency to Modules/Makefile.in; some
	things in README and Misc/NEWS; change pathnames in
	Demo/tkinter/guido/*.py; new date in Doc

Mon Oct 10 19:00:34 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Makefile.in: apply ranlib to installed libraries

	* Modules/socketmodule.c: new style

	* Doc/ref3.tex: some stuff about __getattr__ etc.

Thu Oct  6 16:40:05 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Got rid of Modules/imgformat.c (will be distributed with Jack's
	img package)

	* Doc/*.tex: moved title boilerplate to separate file, added
	copyright notice (separate file)

Wed Oct  5 11:13:13 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Modules/config.c.in: don't include frozen.c when frozen (the new
	freeze script compiles it separately)

	* Lib/os.py: add dummy import posixpath, for freeze script

	* Python/marshal.c (r_object): plugged memory leak in reading of
	code objects

	* Modules/config.c.in (getpythonpath): always return malloc'ed
	memory -- save a static pointer to free next time (prevents leaks)

Thu Sep 29 10:35:28 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Grammar/Grammar: got rid of history; changed some diagram
	commands

	* Lib/types.py: cosmetic changes

	* Mac/{config.c,macosmodule.c}: new interface to (a few bits of)
	the Mac OS

	* Modules/xxmodule.c: integrated with xxobject.c by Jack

	* Modules/(posix,socket}module.c: more NT changes

	* Python/traceback.c: security fix -- check for buffer oveflow
	before concatenating sys.path item and module name

	* Python/ceval.c, Include/ceval.h: promote MakePendingCalls to
	global: Py_MakePendingCalls.  Also guard against recursive calls

	* Python/pythonmain.c: fatal error if can't alloc mem for -c
	string

	* Python/pythonrun.c: add string "Python" to fatal error message

Wed Sep 28 16:39:09 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Objects/longobject.c: change ValueError to OverflowError when
	converting to int

	* Objects/xxobject.c: changed to use new style (not finished?)

	* Objects/stringobject.c: use HAVE_LIMITS instead of __STDC__

	* Objects/rangeobject.c: modernized

	* Objects/floatobject.c: add overflow check when converting float
	to int and implement truncation towards zero using ceil/float

	* Parser/intrcheck.c: make 'interrupted' global (forgot for
	whom...)

	* Include/rename1.h: don't even define Py_FPROTO

	* Python/{modsupport.c,getargs.c,Makefile.in},
	Include/modsupport.h: moved getargs() to its own file and
	re-implemented it entirely to support optional arguments, multiple
	arguments without surrounding parentheses
	(when called as newgetargs()), and better error messages

	* Include/classobject.h, Objects/classobject.c,
	Python/{ceval.c,bltinmodule.c}: entirely redone operator
	overloading.  The rules for class instances are now much more
	relaxed than for other built-in types
	(whose coerce must still return two objects of the same type)

Sun Sep 18 07:26:39 1994  Guido van Rossum  <guido@cayenne.cwi.nl>

	* Python/pythonrun.c (print_error): print only last line of
	multi-line source line

	* Parser/tokenizer.c (tok_nextc): count line numbers when parsing
        strings

Fri Sep 16 15:54:56 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Python/modsupport.c (do_arg): added error message if "O!" fails;
	change type of converter for "O&" to function returning int taking
	an object* and a void* parameter; it should return 1 for success
	or return 0 and set an exception for failure to convert

Wed Sep 14 14:08:44 1994  Guido van Rossum  <guido@voorn.cwi.nl>

	* Include/Python.h: new header file for new naming scheme

	* various modules: #include "Python.h" and remove most remporary
	renaming hacks

	* Lib/whrandom.py: if seed is (0,0,0), initialize from current
	time; default seed's arguments to (0,0,0)

	* Python/ceval.c (eval_code), Include/ceval.h: added registry of
        pending functions (to be used by functions that are called
        asynchronously, like UNIX signal handlers or Mac I/O completion
        routines)

Wed Sep 14 11:05:36 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/libsys.tex (section{Built-in Module \sectcode{sys}}):
	documented sys.check_interval

Tue Sep 13 21:35:19 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Import/pythonrun.h, Python/{import,pythonrun}.c,
	mac/macsetfiletype.c: changes by Jack to execute .pyc file passed
	as command line argument.  On the Mac .pyc files are given a
	special type so they can be double-clicked

	* Modules/stropmodule.c (strop_[r]find): change index range check
	-- don't raise ValueError buit silently clip when it's out of
	range (this is compatible with slicing)

Mon Sep 12 12:53:07 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Extensions/X11/Xmmodule.c: (Sjoerd): Implemented
	Xm.OptionButtonGadget and Xm.OptionLabelGadget

	* Modules/Setup.in: define PYTHONPATH using COREPYTHONPATH for
	extensions; add -lm to math module definition

	* Modules/Makefile.pre.in: remove *.so and so_locations on clobber

	* Modules/makesetup: (Sjoerd): treat words beginning with a dollar
	and not ending in a well-known extension as linker arguments

	* Lib/urlparse.py: URL parser according to the latest Internet
	draft

	* README: added note about HP-UX

Sun Sep 11 12:12:28 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Misc/indent.pro: Steen's approximation of my C style as a GNU
	indent profile

	* Modules/{Setup.in,termios.c}: add Steen's termios; also
	Lib/[pt]ty.py, Demo/scripts/script.py, Lib/irix5/TERMIOS.py

	* Demo/scripts/h2py.py: merged in Steen Lumholt's changes to
	handle #include.  Now also handles one-argument macros.

	* configure.in: use uname to decide how to create / link shared
	libraries and to set $(MACHDEP) (machine dependent subdirectory of
	Lib)

	* Makefile.in: shared library support; added target sharedinstall
	which move shared libraries into Lib/$(MACHDEP)

	* Modules/{Makefile.pre.in,Setup.in,makesetup}: support shared
	libraries.  Had to re-engineer rule production in makesetup
	because sed was dumping core on the script fed to it -- now the
	rules are always appended to the end of the Makefile.

Fri Sep  9 11:35:28 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/uu.py: new module, does uuencode/uudecode (thanks to Lance)

	* Grammar/Grammar: fewer #diagram:break hacks needed; removed
	history from file

Thu Sep  8 10:24:41 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/grammar1.c (finddfa): massive speed up by using direct
	addressing instead of searching

Wed Sep  7 08:49:37 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Include/rename1.h: added PyArg_GetInt

	* pythonrun.h: added Py_AtExit

	* Doc/libsocket.tex, Modules/socketmodule.c: added Tommy
	Burnette's setblocking() method

	* Modules/signalmodule.c: adapted to new module style (Lance);
	added {BGN,END}_SAVE around pause() call

	* Objects/object.c (DELREF): must zap type pointer *before*
	calling free() (or other destructor)

Sat Sep  3 14:12:38 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/{Setup.in,tkintermodule.c,tkappinit.c}: moved tkinter
	into the main Modules directory, and its Lib and Demo
	subdirectories into the main Lib and Demo directories.  Moved
	definition of STDWIN component and TK component of PYTHONPATH to
	their respective sections so it's easier to remember to enable
	them.

	* Python/pythonrun.c (cleanup), Include/pythonrun.h: added
	Py_AtExit() -- register cleanup functions for C modules

Tue Aug 30 10:53:50 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/getmtime.c: Remove mac specifics (Mac subdirectory has
	its own version now)

	* Modules/Setup.in: uses .c instead of .o now; added curses

	* Modules/{rotormodule,syslogmodule}.c: new naming conventions

	* Modules/cursesmodule.c: new, interface to curses

	* Modules/makesetup: bugfix: add objects from sources to OBJS

	* Modules/cursesmodule.c: new contribution from Lance

	* Python/bltinmodule.c (builtin_tuple): use pre-existing
	listtuple(v) for lists

Mon Aug 29 15:41:02 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Various places: merged THINK C 6.0 and MPW 3.2 mods: Python 1.1
	should build flawlessly on the Mac using either compiler

Fri Aug 26 10:18:05 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/tut.tex (subsection{Lambda Forms}): fix typo in lambda
	example

Thu Aug 25 12:30:11 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/importall.py: obsolete.

	* Lib/{compileall,py_compile}.py: new modules for compiling .py
	files.

	* Modules/timemodule.c (floattime), Objects/longobject.c
	(dgetlongvalue): add (double) casts for the benefit of the SCO C
	compiler

Tue Aug 23 00:52:32 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/Setup.*: removed all except Setup.in (huh?  I thought
	I'd done that already?!); disable gdbm by default

	* Modules/makesetup: support C++ files now; these should be given
	as file.C or file.cc or file.c++; C files can be given as file.c
	(instead of file.o, which is still supported)

	* configure.in, */Makefile*.in: OPT can now be specified in the
	env at configure time and will then be put in all Makefiles as
	default

	* Modules/config.c.in: change mac specific things

	* Python/import.c: add lost NT-specific code back in

	* Parser/tokenizer.c: backup over illegal newline in string
	literal (for "completeness" test)

	* Include/node.h: make some fields short to save space during
	parsing

	* Modules/posixmodule.c: some more NT changes

	* Doc/libtime.tex: get rid of references to millitime() and
	millisleep(); document clock()

Mon Aug 22 10:53:59 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/linecache.py: don't crash on empty filename

	* Lib/macpath.py: don't return trailing colon for dirname()
	(XXX won't do for volume names -- but otherwise glob(':*:*.py')
	loops forever)

	* Lib/traceback.py: print SyntaxError correctly

	* Modules/signalmodule.c: added pause().

	* Python/pythonrun.c (print_error): added INCREF/DECREF pair --
	the exception returned by a syntax error (when reported) would
	contain an object with refcnt zero!

Fri Aug 19 15:35:44 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* */Makefile*.in: remove lib*.a before adding to it

	* Lib/urllib.py: fix caching bug (by disabling the cache)

	* Lib/sgi/flp.py: fix caching bug (always write the whole file to
	the cache!)

	* Doc/ref6.tex (section{Assignment statements}): added warning
	about overlaps in lhs of assignment (e.g. "i, x[i] = 1, 2")

	* Python/errors.c (err_clear): clear interpreter stack trace

Wed Aug 17 16:10:07 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Moved patchlevel.h from Python/ to Include/, moved all code from
	version.c to config.c and removed version.c, and changed
	Modules/Makefile(.pre.in) to add dependencies on $(MYLIBS) for
	config.c (so the date in the version is always current).  Also
	changed the format of PATCHLEVEL: it is now a string containing
	the complete version number, e.g. "1.1".

	* Grammar/Grammar: Added #diagram:... comments for Kees Blom's
	railroad diagram generator

	* Doc/libstring.tex (section{Standard Module \sectcode{string}}):
	removed references to {ato{f,i,l},index}_error

	* Lib/string.py: find/rfind is now the main implementation and
	index/rindex is a wrapper that raises index_error (which is now
	always ValueError)

	* Modules/stropmodule.c: implement find/rfind instead of
	index/rindex (raising and catching an exception is much more
	expensive than returning and testing -1)

	* Lib/os.py: do fake "import posix" for freeze.py script

Tue Aug 16 23:58:30 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/parsetok.c (parsetok): don't call strncpy(str, NULL, 0)

	* Doc/libfuncs.tex (section{Built-in Functions}): added docs for
	delattr()

	* Python/bltinmodule.c: added delattr(x, 'attr'), equivalent to
	del x.attr

Fri Aug 12 15:00:20 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/libfuncs.tex: don't use $math$ in description of pow(x,y,z);
	describe tuple()

	* Doc/libposixfile.tex: use tableiii instead of tableii, so
	partparse will work again (I know, chicken!)

	* Doc/libthread.tex: Added get_ident(); updated text on module
	availability

	* Doc/myformat.perl: Added sub do_cmd_Cpp

	* Python/compile.c (com_argdefs, com_arglist): avoid referencing
	CHILD(n,i) for i >= NCH(n)

	* Python/bltinmodule.c: added tuple() builtin

Thu Aug 11 16:41:14 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Objects/classobject.c, Include/classobject.h: added __getattr__
	and __setattr__ support to override getattr(x, name) and
	setattr(x, name, value) for class instances.  This uses a special
	hack whereby the class is supposed to be static: the __getattr__
	and __setattr__ methods are looked up only once and saved in the
	instance structure for speed.
	(Later rewritten to also support __delattr__ and to store the
	routines in the class instead of in the instance)

Wed Aug 10 13:42:29 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in, Makefile.in: remove the AC_PREFIX() call -- it's
	more trouble than it's worth at CWI and most other people seem to
	install Python in the default (/usr/local) anway.  Changed comment
	describing --prefix in Makefile.in

	* Lib/urllib.py (ftpcache): remove debug print statement

Tue Aug  9 14:32:45 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Objects/{int,long,float}object.c, Include/object.h,
	Python/bltinmodule.c: mods by Andrew Kuchling to implement
	pow(x,y,z) == pow(x,y)%z, but without incurring overflow

	* Python/import.c: if initializing a module did not enter the
	module into sys.modules, it may have raised an exception -- don't
	override this exception.

	* Include/rename1.h: added PyMethodDef and PyObject

Mon Aug  8 09:51:08 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/{Makefile,*.tex}: Changes by Andrew Kuchling:
	  * Added dependencies to the Makefile
	  * Added \optional{} commands all over the place (possibly not
	    finished yet)
	  * Defined \optional and \Cpp in myformat.sty
	  * Changed all occurrences of C++ to \Cpp{}, for nicely
	    formatting the + signs.
	  * Fixed typos, sentence structure in lots of places
	  * Added documentation for the rotor module
	  * Added a commented-out paragraph to libcrypto.tex that can be
	    added once the Python Cryptography Kit is released.
	  * Altered the table in libposixfile.tex a bit.
	  * Documented socket.gethostname()
	  * Started completely rewriting the Extending manual.

	* Modules/{Setup.in, gdbmmodule.c}, Doc/{lib,libgdbm}.tex: added
	Anthony Baxter's gdbm module (derived from Jack's dbm module)

Fri Aug  5 11:43:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* BUGS: new file (merger of unofficial BUGS1.0.x files)

	* Modules/{Setup.in,Makefile.pre.in}: renamed some modules to
	shorter names (dropped the "module" from the name): sunaudiodev,
	imgformat, audioop, imageop, imgfile

	* Python/import.c: support *.o/*.so as alternative for
	*module.o/*module.so

	* Modules/stropmodule.c (strop_rindex): make rindex('abc', '') do
	the right thing (i.e. return 3 instead of 0)

	* Python/bltinmodule.c (builtin_vars): correct typo in error msg

	* Doc/libsocket.tex (subsection{Socket Object Methods}):
	documented gethostname() and a few misc things

	* Modules/socketmodule.c: disabled allowbroadcast() socket method

Mon Aug  1 01:28:29 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Makefile.in (TAGS): Call etags w/o -t option

	* Lib/rfc822.py: fix two bugs: error in readheaders interpreting
	regex.match() result, and wrong logic in getfirstmatchingheader()
	when the same header occurs twice consecutively

	* Lib/test/test_types.py (6.4.1): test for particular bug in
	integer multiply

Sat Jul 30 13:31:40 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/libsocket.tex, Modules/socketmodule.c: send() and sendto()
	now return actual byte count (useful for sockets in non-blocking
	mode)

Tue Jul 26 14:21:17 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in: check for <limits.h>

	* Objects/longobject.c (newlongobject): fix long(0x80000000) and
	add warning that it isn't actually correct on 64-bit machines;
	include <limits.h> if HAVE_LIMITS_H is defined

	* Objects/intobject.c (int_mul): check int*int overflow without
	resorting to double precision (many thanks to John Tromp)

	* Modules/signalmodule.c (signal_alarm): interface to Posix alarm()

	* Python/ceval.c (call_object): print message before abort()

Mon Jul 25 11:30:56 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/libstring.tex (section{Standard Module \sectcode{string}}):
	documented string.count()

	* Lib/string.py: added count(s, sub, i=0), returns number of
	occurrences of sub in s[i:]

	* Doc/keywords.py: program to sort table of keywords in ref2.tex

	* Doc/ref2.tex (subsection{Keywords}): add 'access' and 'lambda'
	to list of reserved words

Thu Jul 14 15:26:14 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* README, Misc/NEWS, Python/patchlevel.h,
	Doc/{lib,ext,tut,ref}.tex: bump version to 1.0.3; in README, fewer
	references to it elsewhere, nor to IP numbers.

Wed Jul 13 18:51:36 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/mhlib.py (removefromallsequences): call putsequences with
	proper argument

Mon Jul 11 13:00:36 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/selectmodule.c: don't accept negative file descriptors;
	changed error messages slightly

Thu Jul  7 12:20:10 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/syslogmodule.c: new module by Lance

	* configure.in: don't check for strtod!

	* Python/import.c: undo Mac DL mods (temporarily) and install NeXT
	dl mods by William Lewis instead.

	* Modules/posixmodule.c (posix_popen): substitute pclose for
	fclose (how did fclose ever creep into this?)

Wed Jul  6 21:45:54 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/{bdb,cmd,pdb}.py: Mods by Rickard Westman: No longer barfs
	on lambda:s (outputs "<lambda>" as the function name); "a(rgs)" in
	pdb now works; help messages added to pdb (lifted from pdb.doc).
	Also, "h pdb" calls pdb.help().  cmd.do_help() displays topics on
	a nicer way (I think).  Also, topics for which there is a help_
	method, but no do_method (like "pdb" above) are displayed in a
	special way.  My own mod: fix break on function to also support
	methods.

Tue Jul  5 23:18:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/stropmodule.c (strop_rindex): change semantics of third
	argument -- as in the original string.rindex, search to its right,
	not to its left.  (Maybe both index and rindex need a 4th
	parameter to restrict the search on the other end?

Mon Jul  4 23:01:36 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/timemodule.c (sleep, floatsleep): don't use setjmp or
	signal, rely on err_errno() or sigcheck() instead.

	* Dos/{pcmodule,dosmodule}.c, Modules/posixmodule.c: don't include
	<setjmp.h>

Sat Jul  2 00:42:47 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/urllib.py: implemented new quoting rules; added splituser,
	splitpasswd, splitattr, splitvalue; new ftp syntax (user:passwd,
	cwd to each subdir, type={a,i,d})

Fri Jul  1 17:32:51 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/traceback.c: add function name to traceback info

	* Object/listobject.c, Modules/{array,mpz}module.c: include
	<sys/types.h> for size_t

Fri Jul  1 12:47:05 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Makefile.in (Makefile): add dependency on config.status

	* configure.in: support --with-gcc[=value], --without-gcc

	* configure.in, acconfig.h, config.h.in: check for clock_t

	* Modules/{arraymodule,mpzmodule}.c: Include sys/types.h, for size_t

	* Lib/test/test_types.py (6.5.1 Strings): test for nasty string
	formatting bug

	* Objects/stringobject.c (formatstring): fix nasty bug in resizing

Wed Jun 29 10:01:17 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/ref3.tex (section{The standard type hierarchy}
	\label{types}): fix typo

	* Lib/packmail.py: applied patch from Lance to remove '.' and '..'

Tue Jun 28 00:57:35 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/ref1.tex: grammar notation can use single or double quotes now

	* configure.in (termcap): hack around conflict about clear() on
	IRIX 5 in shared libraries gl and termcap

	* Python/bltinmodule.c: added callable() predicate

Wed May 18 15:01:13 1994  Donald Beaudry  (don@zippy.vicorp.com)

	* modsupport.c (do_arg): Changed all of the int getting things to
	just try to get and int, instead of explicitly checking for an int
	first.

	(do_arg): Added the "O&" option to allow using a user supplied
	conversion function. 

Wed May 18 14:10:49 1994  Donald Beaudry  (don@zippy.vicorp.com)

	* intobject.c (getintvalue): Changed to allow automatic conversion
	from any type that supports the nb_int method.

	* floatobject.c (getfloatvalue): Changed to allow automatic
	conversion from any numeric type that supports the nb_float
	method.

Wed May  4 22:56:15 1994  Donald Beaudry  (don@scooter.vicorp.com)

	* object.h -- Added tp_call member to the typeobject struct
	This along with a minor change to the ceval.c allows overloading
	of the function call operator for any class.

Wed May  4 22:23:48 1994  Donald Beaudry  (don@scooter.vicorp.com)

	* modsupport.c -- replace the part of getargs that processes "O!",
	it had a minor problem with comparing the types.

	* ceval.c -- changed call_object to make use of the tp_call
	field.

Fri Jun 27 17:22:00 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/pythonmain.c: On MPW (3.2) unbuffered seems to hang, so
	use setvbuf ... _IOLBF for -u option.

	* Python/mystrtoul.c: MPW hack (overflow check doesn't seem to work)

Thu Jun 23 14:46:34 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/Makefile.pre.in (clobber): delete config.c and glmodule.c

Thu Jun 23 00:17:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/tokenizer.c: if a triple-quoted string ends in a quote
	followed by a newline (followed immediately by the terminating 3
	quotes) then a syntax error or system error ensues (one-line fix)

	* Doc/ref4.tex: clarify that global name space is almost always
	containing module's name space

	* Lib/profile.{py,doc}: totally new versions by James Roskind;
	also edited source & doc to replace 'jprofile' by 'profile'

	* Modules/posixmodule.c: don't mess with SIGPIPE any more -- this
	is now done in Python/pythonrun.c (saves NT dependency here)

	* Modules/Setup.*: removed all except Setup.in (keeping them up to
	date was too much of a pain)

	* Python/import.c: don't rely on three-line "dl.h", just copy the
	contents.

	* Doc/libtypes.tex (subsubsection{More String Operations.}):
	clarified tuple vs non-tuple argument to format strings.

Wed Jun 22 10:38:22 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/libsocket.tex: clarify the meaning of address for those
	methods that or return addresses.

	* Doc/libtypes.tex (subsubsection{File Objects.}): documented
	writelines.

Tue Jun 21 15:54:36 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/aifc.py: avoid calling read(0)

	* Lib/sgi/cddp.py: added some functionality (Sjoerd)

	* Include/modsupport.h: added decl for initmodule2().

	* Parser/myreadline.c (my_readline): fixed typo in MPW-specific
	hack; removed debug fprintfs; added two needed #includes.

Mon Jun 20 23:46:04 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Objects/fileobject.c (file_read): test for negative read count
	was misplaced.

Mon Jun 18 11:20:00 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* acconfig.h: changed GETPGRP_HAVE_ARGS into GETPGRP_HAVE_ARG

	* Lib/posixpath.py(walk): don't descend down symbolic links

Thu Jun 16 16:20:12 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/imgformatmodule.c: new module for Jack by Jack

Tue Jun 14 21:07:00 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Fix bug in 3quoted strings where string ends in quote followed
	by newline

Mon Jun 13 00:24:06 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/multifile.py: added readlines() and read() methods

	* Lib/mimetools.py: added functions to encode/decode standard MIME
	Content-transfer-encoding types (as well as uuencode)

	* Lib/mhlib.py: new interface to MH folders and messages

Sun Jun 12 17:38:31 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/socketmodule.c (sock_listen): fix typo (== instead of =)

Thu Jun  9 23:33:33 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/compile.c (parsenumber), Python/marshal.c (r_object):
	replace strtod() by atof()

Tue Jun  7 11:41:05 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/lib.tex: added warning about lineii, libposixfile and partparse

	* Lib/bdb.py (clear_all_breaks): this was defined with two
	arguments that weren't used and shouldn't have been there

Mon Jun  6 14:53:05 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/ceval.c (call_trace): Added call to fast_2_locals so
	locals_2_fast won't zap locals if the trace function never looks
	in f.f_locals; don't XDECREF(f->f_trace)

Sun Jun  5 13:18:00 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/rfc822.py: Accept lines ending in CR LF as well

Fri Jun  3 16:37:58 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/profile.py: unspecified improvements by Sjoerd

	* Lib/{bdb,pwd,stdwin/wdb}.py: remove debugger overhead when
	continuing with no breakpoints; add set_trace() method and
	functions to forcibly enter the debugger

	* Python/ceval.c(eval_code): give the name of the local variable
	when LOAD_FAST or DELETE_FAST fails

	* frameobject.[ch], ceval.c: made fast_2_locals and locals_2_fast
	global and moved them to frameobject.c.  getattr(f, "f_locals")
	now calls fast_2_locals and there are fewer other calls to it

Thu Jun  2 13:50:11 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/ceval.c (call_trace): *p_trace can now be cleared by the
	trace function!

	* Modules/{{pwd,grp}module.c,Setup.in}: split pwdmodule.c into pwd
	and grp modules (e.g. OS2 seems to have pwd but not grp)

	* Modules/posixmodule.c: OS/2 mods: add #include <io.h>

	* configure.in: test for existence of link, chown, setuid, setgid;
	use std macros for output; require autoconf 1.8

	* Python/sigcheck.c: sigcheck() for use without signalmodule.c

	* Modules/signalmodule.c: added thread compatibility (only main
	thread uses signals); much improved efficiency; intrcheck()
	doesn't call sigcheck() but only tests and clears the SIGINT
	tripped flag.

	* Lots of places: replace intrcheck() by sigcheck() and remove
	following err_set(KeyboardInterrupt).

Wed Jun  1 11:33:34 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/regexmodule.c (reg_dealloc): remove bogus XDEL's.

Tue May 31 11:22:47 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/intrcheck.c: removed sigcheck()

	* Python/structmember.c (setmember): test for NULL value

	* frameobject, Python/ceval.c (eval_code): moved trace variable to
	frame object so debugging can be switched on later

Mon May 23 14:44:46 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/newmodule.c: new module, create empty new objects (by
	Tommy)

Fri May 20 09:46:50 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/Makefile: add DVIPS variable with default "dvips -f"

	* Parser/myreadline.c (my_fgets): Fix position of #endif EINTR

Wed May 18 00:21:05 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/lib.tex: added libfcntl and libposixfile (by Jaap V)

	* Objects/funcobject.c (func_compare): take argcount and argdefs
	into account

Wed May 17 00:00:00 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/import.c: bump MAGIC because of changes below

	* Python/{ceval,compile}.c, Include/frameobject.h: changes to code
	objects -- consts/names are tuples, RESERVE_LOCALS instruction
	gets tuple of names instead of dictionary -- so code objects are
	immutable and thus code and function objects are hashable

	* Objects/listobject.c, Include/listobject.h: added listtuple() --
	convert list to tuple

Tue May 17 15:40:12 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/ceval.c (getframe): cast current_frame to (object *)

	* Lib/ftplib.py (login): default user='' is translated explicitly
	to 'anonymous'

Wed May 11 10:29:22 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/tokenizer.c (tok_nextc): fix inf loop when file does not
	end in newline

	* Modules/sybasemodule.c: new, interface to sybase (John Redford)

	* Modules/signalmodule.c: new, catch unix signals (Lance)

	* Parser/intrcheck.c, Python/ceval.c, Include/ceval.h,
	Python/pythonrun.c: prepare for signalmodule.c; add sigcheck()
	interface to intrcheck.c, add getframe() interface to ceval.c;
	don't override signal handlers in pythonrun.c

Tue May 10 09:01:06 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/import.c (get_module): print dlopen debug message only of
	verbose

Mon May  9 10:37:48 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* acconfig.h: added _POSIX_THREADS define

	* configure.in: test for -lpthreads; add directory argument to
	--with-thread to LIBS as -L option

	* Python/thread.c: split in per-system files (thread.c includes
	thread_foobar.h for foobar threads)

	* Objects/stringobject.c (formatstring): don't DECREF result of
	strobject() before using it

	* Doc/libtypes.tex: fix typo in table of list methods; clarify
	truncation behavior of floating point formatting

	* Doc/ref3.tex: clarify defaults for __repr__, __cmp__ and
	__str__; correct (some) descriptions of class constructors

Fri May  6 11:25:26 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* various files: micro changes needed to compile on Mac;
	Grouped more Mac-specific files in Mac subdirectory

	* Lib/*.py: rewrote many functions to use default arguments
	instead of arbitrary argument lists

Thu May  5 12:33:31 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/{cryptmodule.c,Setup.in}: new crypt(3) interface (Steve M)

	* Python/bltinmodule.c, Include/bltinmodule.h: new fn setbuiltin()
	to set a built-in variable

	* Python/ceval.c (eval_code): place '_' variable in __builtin__
	instead of in local dictionary, to avoid endless recursion when
	printing vars()

========================================================================
Release 1.0.3 (14 July 1994)
========================================================================

Thu Jul 14 14:38:11 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* copied FAQ 1.10 (which still references 1.0.2 by the way)

Thu Jul  7 12:20:10 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in: don't check for strtod!

Tue Jul  5 23:18:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/stropmodule.c (strop_rindex): change semantics of third
	argument -- as in the original string.rindex, search to its right,
	not to its left.  (Maybe both index and rindex need a 4th
	parameter to restrict the search on the other end?

Fri Jul  1 12:47:05 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in: support --with-gcc[=value], --without-gcc

	* configure.in, acconfig.h, config.h.in: check for clock_t

	* Objects/stringobject.c (formatstring): fix nasty bug in resizing

Tue Jun 28 00:57:35 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in (termcap): hack around conflict about clear() on
	IRIX 5 in shared libraries gl and termcap

Thu Jun 23 00:17:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/tokenizer.c: if a triple-quoted string ends in a quote
	followed by a newline (followed immediately by the terminating 3
	quotes) then a syntax error or system error ensues (one-line fix)

Sun Jun 12 17:38:31 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/socketmodule.c (sock_listen): fix typo (== instead of =)

Thu Jun  9 23:33:33 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/compile.c (parsenumber), Python/marshal.c (r_object):
	replace strtod() by atof()

Thu Jun  2 13:50:11 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in: test for existence of link, chown, setuid, setgid;
	use std macros for output; require autoconf 1.8

Wed Jun  1 11:33:34 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/regexmodule.c (reg_dealloc): remove bogus XDEL's.

Tue May 31 11:22:47 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/structmember.c (setmember): test for NULL value

Fri May 20 09:46:50 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/myreadline.c (my_fgets): Fix position of #endif EINTR

Wed May 11 10:29:22 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/tokenizer.c (tok_nextc): fix inf loop when file does not
	end in newline

Tue May 10 09:01:06 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/import.c (get_module): print dlopen debug message only of
	verbose

Mon May  9 10:37:48 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* acconfig.h: added _POSIX_THREADS define

	* configure.in: test for -lpthreads; add directory argument to
	--with-thread to LIBS as -L option

	* Objects/stringobject.c (formatstring): don't DECREF result of
	strobject() before using it

Fri May  6 11:25:26 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* various files: micro changes needed to compile on Mac;
	Grouped more Mac-specific files in Mac subdirectory

Thu May  5 12:33:31 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/bltinmodule.c, Include/bltinmodule.h: new fn setbuiltin()
	to set a built-in variable

	* Python/ceval.c (eval_code): place '_' variable in __builtin__
	instead of in local dictionary, to avoid endless recursion when
	printing vars()

========================================================================
Release 1.0.2 (4 May 1994)
========================================================================

Wed May  4 13:12:00 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* README: version 1.0.2

	* Objects/fileobject.c (setfilebufsize): less error checking

	* configure.in: test for withval != yes (autoconf 1.8 change)

	* Makefile.in: don't remove config.status on "make clobber"

	* Python/ceval.c (eval_code): removed last traces of killprint (-k
	option)

	* Doc/tut.tex: documented some more new stuff

	* Added else clause to try-except.  Affected files:
	Grammar/Grammar, Include/graminit.h, Python/graminit.c,
	Python/compile.c, Doc/ref7.tex, Doc/tut.tex

Tue May  3 15:21:47 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Misc/python.man: documented -u; undocumented -k

	* Python/{python,frozen}main.c: got rid of -k option; added -u
	option (unbuffered stdout/stderr); plus environment

	* Python/import.c: Steven Majewski's mods for AIX

	* Lib/lockfile.py: new module to lock files (using fcntl)

	* Objects/fileobject.c, Include/fileobject.h: added setfilebufsize
	function to set buffer size (call only from C when it's safe!)

	* Python/bltinmodule.c (builtin_open): Added 3rd parameter to give
	buffer size; default 2nd parameter to "r"

Mon May  2 17:51:23 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/{al,cd,sv}module.c: added (method) casts to methodlist
	initializers

Thu Apr 28 15:01:50 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/ref2.tex: (section{Line structure}): documented line joining
	without backslashes inside parens

Wed Apr 27 13:15:42 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Misc/python-mode.el: version 1.09 from Tim (grand new
	indentation scheme)

	* configure.in: test for setvbuf

	* Python/ceval.c (PRINT_EXPR): assign a non-None value to '_'
	before printing it

	* Python/compile.c: only call PRINT_EXPR for interactive code
	(start symbol single_input), else call POP_TOP after evaluating an
	expression

Tue Apr 26 16:23:06 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/bltinmodule.c (builtin_reduce): added essential INCREF()
	if a third argument is present

	* Doc/tut.tex: added chapter "Recent Additions"

Mon Apr 25 11:27:09 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/ref7.tex (section{Function definitions}): add missing '}'.

	* Doc/ref2.tex (subsection{String literals}): documented triple
	quotes and double quotes.

	* Lib/test/test_grammar.py: added tests for triple-quoted strings
	and strings continued with backslash-newline

	* Objects/fileobject.c (writestring): don't do anything when
	writing to a Python object while an error is already set

	* Parser/tokenizer.c: added support for triple-quoted strings and
	strings continued with backslash

	* Parser/tokenizer.h: moved here from Include

	* Python/compile.c (parsenumber): support triple-quoted strings.
	Raise SyntaxError, not SystemError for bad number syntax

Fri Apr 22 17:39:20 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Objects/{tuple,list,string,mapping}object.c,
	Modules/arraymodule.c, Python/compile.c: use new
	joinstring(_decref) interface for more compact code

	* Objects/stringobject.c (joinstring): if error, DECREF and zero
	result; added joinstring_decref() which XDECREFs its second
	argument

Thu Apr 21 10:59:04 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/libtypes.tex (subsubsection{More String Operations}):
	documented new '%(key)s' % {...} formatting and more liberal %s
	interpretation (applies str() first)

	* Doc/libfuncs.tex (section{Built-in Functions}): documented new
	vars() built-in function

	* Objects/stringobject.c (formatstring): add Donald Beaudry's
	patch (slightly changed) to allow '%(<key>)<format>' % {...} to
	format dictionary entries by key.  Also changed %s format to
	accept any type and convert it to a string using str()

	* Python/bltinmodule.c: add new built-in function vars() which
	returns variables (of which dir() returns the sorted keys())

Mon Apr 18 11:00:54 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/libppath.tex (section{Standard Module
	\sectcode{posixpath}}): describe for expandvars()

	* Lib/posixpath.py (expandvars): do it using regular expressions
	instead of forking of a shell

	* Lib/urllib.py (open_http, open_gopher): diagnose missing
	hostname

Sun Apr 17 21:52:52 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/compile.c (com_atom), Grammar/Grammar (atom): string
	literal concatenation -- "abc" 'def' is equivalent to 'abcdef'

Thu Apr 14 12:36:25 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/test/test_thread.py: new module to test threads (very basic)

	* Python/thread.c: remove #define DEBUG 1

	* Demo/scripts/freeze.py: changes by Jaap V and my own to make it
	work again

	* Makefile.in (libainstall): install frozenmain.c

	* Python/frozenmain.c: added getprogramname()

	* Doc/ref7.tex (section{Function definitions}): describe default
	parameter values

	* Lib/test/test_grammar.py: added grammar variants for default
	argument expressions

	* Python/compile.c: compile default argument values (com_argdefs
	plus related stuff)

	* Python/bltinmodule.c (builtin_apply): require that the argument
	list is a tuple

	* Misc/python-mode.el: change by Donald Beaudry to
	py-compute-indentation; and fix to that by Sjoerd

Wed Apr 13 10:08:33 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/ceval.c (eval_code): implement SET_FUNC_ARGS opcode

	* Include/opcode.h: added SET_FUNC_ARGS opcode

	* Objects/funcobject.c (newfuncobject, func_memberlist): added
	func_argcount and func_argdefs fields and {get,set}funcargstuff()
	functions.

	* Include/funcobject.h: Added func_argcount and func_argdefs
	fields and {get,set}funcargstuff() functions.

	* Python/import.c (init_builtin): Give error message if module's
	initialization function is NULL (e.g. for 'sys').
	(get_module): Give error message if reloading a dynamically
	loadable module.
	(reload_module): Give error message if reloading a built-in
	module; correctly (I hope) reload a frozen module.

	* Doc/ref6.tex (break and continue): rephrase definition of
	restrictions on where these may occur; change rules for continue
	to match implementation.

	* Doc/ref4.tex (section{Code blocks, execution frames, and name
	spaces}): fix definition of what's local to include deleted
	targets; added footnote describing exec and from - import *
	restriction.

	* Lib/dis.py: added LOAD_GLOBALS and EXEC_STMT to list of opcodes.

Tue Apr 12 10:27:19 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/ceval.c (eval_code): fix core dump on "raise ()" -- found
	by Tim Peters

Mon Apr 11 20:48:26 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/compile.c (optimize): added optimization for LOAD_NAME
	suggested by Steve Majewski

	* Python/ceval.c (eval_code: case DELETE_FAST): fix cut-paste
	error (w should be x) found by Steve Majewski

Tue Mar 22 15:37:06 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/profile.py: fix handle_return for exceptional case (fix
	suggested by Jim Roskind)

	* Lib/tzparse.py (tzprog): Fix typo in test for regex.match

	* Lib/urlopen.py: renamed to Lib/urllib.py

Thu Mar 17 01:24:29 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/urlopen.py: added quote() and unquote() functions

Wed Mar 16 11:26:29 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Objects/mappingobject.c: allow dictionaries with more than
	20,000 entries.

Thu Mar 10 11:13:24 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/{pdb,profile,bdb,codehack,stdwin/wdb}.py:
	codehack.getcodename() is obsolete now we have co.co_name; same
	for getfuncname(): f.func_name.  Module codehack is still needed
	for getlineno(), used in profile and pdb

Tue Mar  8 10:37:21 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/modsupport.c (do_arg): Format "O!" means typechecked
	object; pointer argument must be preceded by typeobject

	* Modules/threadmodule.c: don't define exit_prog if NO_EXIT_PROG
	is defined

	* Python/thread.c: don't define [_]exit_prog if NO_EXIT_PROG is
	defined; in the SGI version, don't use signals if exit_prog is
	node defined defined; in the SGI version, waitpid() for exited
	threads.

	* Python/pythonrun.c: don't call [_]exit_prog if NO_EXIT_PROG is
	defined

	* Include/thread.h: define NO_EXIT_PROG and then don't define
	[_]exit_prog

	* Modules/dbmmodule.c: Add calls to dbm_clearerr() after error on
	assignment (fix by Jack)

Mon Mar  7 12:41:32 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/test/test_rgbimg.py: search test file along sys.path

	* Lib/test/test_{b1,b2,grammar}.py: tests for indefinite sequences

	* Python/{bltinmodule,ceval}.c: Changed implied and explicit loops
	over sequences to allow for "indefinite" sequences a la Steve
	Majewski.  Instead of iterating over 0, 1, 2, ..., len(a)-1, we
	now iterate over 0, 1, 2, ..., until we get an IndexError
	exception (other exceptions are still errors).  This affects the
	semantics of the following language constructs: "for x in a: ...",
	"x in a", "x not in a", and the following built-in functions:
	filter(), map(), max(), min(), reduce().

	* Doc/ref6.tex (section{Assignment statements}): clarify slice
	assignment; (section{The {\tt break} statement}): fix typo

	* Doc/ref5.tex (subsection{Identifiers (Names)}): clarify
	difference between local and global

	* Doc/ref2.tex (subsection{String literals}): fix typo in def of
	escapeseq

	* Lib/addpack.py: new module to add packages to sys.path

	* Lib/urlopen.py: added basejoin() function

Fri Mar  4 13:07:43 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/urlopen.py(open_ftp): avoid crash when no host given

Wed Mar  2 10:33:39 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/ceval.c (eval_code): use sys.check_interval to reset the
	ticker

	* Lib/repr.py: added special case for class instances (which may
	cause exceptions in their __repr__)

	* Lib/pdb.{py,doc}: mod by Steve Kirsch to allow setting a break
	on a function name

Tue Mar  1 10:32:54 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/pythonrun.c (run_tty_1): Fix wrong (uninitialized) return
	value

	* Doc/ref4.tex (table 4.1): differentiated between exec stmt and
	eval()

Mon Feb 28 10:49:20 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/svmodule.c: correct wrong cast of svideo_getattr

	* README: added Linux to list of supported systems.

	* Doc/libsocket.tex: adapt to min value of 1 for listen() backlog
	argument.

	* Modules/socketmodule.c (sock_listen): ensure backlog argument is
	at least 1.

Fri Feb 25 14:25:30 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Include/osdefs.h, Modules/config.c.in: Added NT case (same as
	MSDOS)

Thu Feb 24 09:58:53 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/posixmodule.c: merged in NT changes by Jaap Vermeulen

	* README: added Mac and PC platforms to blurb.

	* Doc/libfuncs.tex (section{Built-in Functions}): documented
	xrange()

	* Doc/ref7.tex (section{Function definitions} added index entry
	for second ref to lambda.

	* Lib/{bdb.py,pdb.py,stdwin/wdb.py}: call linecache.checkcache()
	in bdb.Bdb's reset method; remove it from the test() functions.

Wed Feb 23 10:15:28 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/parsermodule.c (parser_parsefile): fix fatal typo in
	NULL comparison

	* Misc/python.man: fixed mess describing -d and -i options

Tue Feb 22 09:08:22 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Demo2: added new subdirectory holmes, with Mark Lutz' expert
	system shell

	* Demo: added new subdirectory lutz, with Mark Lutz' examples
	(e.g. psh.py, a nice enhanced Python shell!!!)

	* Lib/os.py: added listdir for Windows NT

	* Modules/timemodule.c, Parser/intrcheck.c: changes for Windows NT
	by Jaap Vermeulen (#ifdef _M_IX86)

	* Makefile.in (inclinstall): added variable INCLUDEPY to specify
	where the include files are installed

	* Modules/nismodule.c (nisproc_maplist_2): cast some args to
	(caddr_t) as required on some systems

	* Objects/mappingobject.c (getmappingitems): correct typo (called
	_values instead of _items)

Mon Feb 21 17:07:07 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/rfc822.py: added access as a dictionary

	* Lib/urlopen.py: new module to access arbitrary files designated
	by a URL (Universal Resource Locator)

	* Lib/{httplib,gopherlib}.py: new modules to interface to HTTP
	and gopher servers

	* Lib/rfc822.py: moved _monthnames to where it is used; add some
	blank lines

Fri Feb 18 09:54:34 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/sgi/flp.py: avoid using time.milli{sleep,timer}

	* Lib/stdwin/WindowSched.py: avoid using time.milli{sleep,timer}
	-- still maintain time in milliseconds though

	* Lib/sched.py: remove references to milli{timer,sleep} from comments

	* Lib/os.py: made execvp more portable; added os.pathsep and
	os.defpath

Thu Feb 17 12:53:33 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/ftplib.py(FTP.makeport): call listen(1) instead of listen(0)
	so it works on Solaris 2

	* Modules/makesetup: reverse order of DEFS so first Setup file can
	override; any non-cpp uppercase option is sent to the linker

Wed Feb 16 10:26:59 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Objects/fileobject.c: add name, mode, softspace and closed
	attributes (softspace is also writable).

	* configure.in: in --verbose mode, don't hide compiler output

========================================================================
Release of 1.0.1 (Feb 15 1994)
========================================================================

Tue Feb 15 11:32:42 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/string.py (atof): force the result to be float

	* Python/modsupport.c (do_arg): don't use a local object va --
	this doesn't work on some compilers (e.g. WATCOM)

Mon Feb 14 10:52:01 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/dospath.py: proper version by Jaap Vermeulen

	* Makefile.in (Makefiles): add semicolon after ) which some Make
	versions need

	* Doc/libposix.tex: added doc for posix.fdopen

	* README: add Sequent and NeXT to list of platforms; add
	troubleshooting section; add hist about -Dindex for readline

	* Lib/os.py: generalize to many os specific modules using a
	dictionary

	* Lib/ospath.py: now obsolete; use os.name to import the right one

	* configure.in: change order of -lsocket and -lnsl and insert
	-linet in between, so it works on Sequent (it still works on
	Solaris 2 -- hope it still works elsewhere as well); add test for
	_NEXT_SOURCE (then define _POSIX_SOURCE); remove test for dlopen;

	* configure.in, acconfig.h, */modsupport.[ch]: rename
	HAVE_VARARGS_PROTOTYPES to HAVE_STDARG_PROTOTYPES, to avoid
	confusion

	* Include/modsupport.h: no prototypes for getargs() and mkvalue()
	in case no varargs prototypes

	* Lib/test/test_grammar.py: don't import sleep from time, but time
	(since sleep has portability problems)

Fri Feb 11 23:47:46 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Parser/intrcheck.c: added QUICKWIN version (doesn't really
	work); fixed MSDOS version to also set a SIGINT handler.

	* Modules/timemodule.c (time_sleep): declare sigsave 'auto' hoping
	this will avoid restoring its pre-setjmp value.  On non-threaded
	systems declare it 'static' since at least Microsoft C still puts
	the auto variable in a register causing a bug...  Also implement
	the MSDOS version of floatsleep() using a busy-wait loop calling
	intrcheck()

Wed Feb  9 11:43:11 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Lib/rfc822.py: added parsedate() and parseaddr() utility
	functions and getdate(), getaddr(), getaddrlist() methods; added
	test code when run as script

	* Include/pythonrun.h, Python/pythonrun.c: cleanup() is now
	externally visible, for the benefits of embedded use.

	* Lib/dospath.py: new module for dos stuff

Mon Feb  7 09:50:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/makesetup: add -n option between Setup files (suppresses
	making of .o files but keeps processing of libraries and module
	names)

	* Makefile.in (libainstall): install Setup, makesetup, config.c.in

	* Modules/Setup*: added -lX11_s to line for gl module

	* Demo/scripts/unbirthday.py: new script, print unbirthday count

	* Modules/audioopmodule.c: removed hack for signed on sun
	(there's now a test in the configure script); check that if
	'signed' is defined away characters aren't unsigned

	* Modules/posixmodule.c: include mytime.h (for clock_t on NeXT)

	* acconfig.h: add entry for 'signed' keyword

	* configure.in: remove const from check for exec prototypes; add
	check for signed keyword and check for whether chars are unsigned

Fri Feb  4 13:07:03 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/makesetup: added usage message, -c and -m options to
	specify config.c.in and Makefile.pre input files, -s option to
	specify source directory, added comments

	* Modules/Setup.in: remove -lm from imgfile entry

	* Modules/nismodule.c: only define YPPROC_MAPLIST, YPPROG and
	YPVERS if not already defined

	* configure.in, acconfig.h, Include/modsupport.h,
	Python/modsupport.c: added separate check for varargs prototypes
	(HAVE_VARARGS_PROTOTYPES)

Thu Feb  3 11:00:26 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/bltinmodule.c (filterstring): fix core dump of func ==
	None

	* Lib/string.py: replace atoi_error, atof_error, atol_error by
	ValueError when the strop versions are used

	* Modules/stropmodule.c: added atol(), added optional base
	argument to atoi() and atol()

	* Objects/longobject.c, Include/longobject.h: added long_escan
	(like long_scan but raises exception for bad base and stores end
	of string into return argument)

	* Objects/rangeobject.c (range_repr): repr must use "xrange..."

Wed Feb  2 12:28:04 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/stropmodule.c: added atoi() and atof()

	* Python/modsupport.c: use stdarg.h / varargs.h depending on
	presence of prototypes

	* Modules/timemodule.c (floattime): try ftime() or time() if
	gettime() fails

Tue Feb  1 14:41:04 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/Makefile (python-lib.info): change makeinfo option style
	from +foo to --foo

	* Doc/README: remove invalid reference to ../misc/FTP; update
	description of making the info version

	* Doc/{fix.el,fix_hack,whichlibs}: minor updates/corrections

Mon Jan 31 11:16:38 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/import.c: only use shared libraries if HAVE_DLOPEN *and*
	HAVE_DLFCN_H are defined; define symbol USE_SHLIB then

	* Doc/tut.tex: lots of small changes by Tim Peters: typos,
	out-of-date examples, restrictions lifted, new and better ways to
	do some things...

Fri Jan 28 10:59:48 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* README: added Minix note

	* Lib/sunau.py: correct byte count calculation from frame rate

	* Lib/aifc.py: rate should be an integer

Thu Jan 27 12:55:17 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/ext.tex: removed obsolete reminder in line 1; correct typo

	* Misc/FAQ: fixed some out of date info, added question on module
	run as script

	* Modules/rgbimgmodule.c (initrgbimg): exception string should
	contain dot not comma

	* Modules/md5module.c: fix compiler warnings about (unsigned) char

	* Makefile.in: libinstall and maninstall should use $(srcdir)

	* Lib/tzparse.py: don't run test() on import

	* Lib/filewin.py: moved into Lib/stdwin

	* Modules/cdmodule.c: fix wrong cast of cdparser_getattr

========================================================================
Release of 1.0.0 (Jan 26 1994)
========================================================================

Wed Jan 26 14:13:39 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/tut.tex: updated version number in invocation example

	* Doc/Makefile: update destination of texi2html

	* Misc/FAQ: updated for release 1.0.0

	* Misc/NEWS: created -- all bits of news

	* Misc/HISTORY: added (from old releases)

	* Misc/README: documented some new files

	* README: non-beta version and preface, don't ref TODO

	* Makefile.in: got rid of references to TODO

	* Python/version.c, Doc/???.tex: updated version and date

Tue Jan 25 20:11:49 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/ext.tex: revamped, finally ready for release

	* Doc/{Makefile,myformat.perl}: support latex2html (0.5.1)

	* README: correct typo on DL_DIRECTORY

========================================================================
Release of 1.0.0 BETA 6 (Jan 24 1994)
========================================================================

Mon Jan 24 16:37:46 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Doc/ref?.tex: Change \verb\<stuff>\ into \verb@<stuff>@ so
	latex2html doesn't crash

Thu Jan 20 18:05:18 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Ext-dummy/, README, Makefile.in: Created new directory
	Ext-dummy/.  Ext-dummy/ contains its own README and copies of
	Extensions/mk{ext,mf}.py.

Tue Jan 18 11:04:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/getmtime.c: Include config.h if we have it

	* Modules/Setup.in: fixed comments about GMP version

	* Modules/nismodule.c: define YPPROC_MAPLIST, YPPROG, YPVERS as
	plain integer literals, to make it work on 64 bit machines

	* Parser/grammar.c (translabel): remove redundant decl of strchr()
	(which caused trouble on AIX)

Sun Jan 16 14:13:13 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in: test for fcntl.h

	* Modules/posixmodule.c: include fcntl.h if it exists

Fri Jan 14 17:35:33 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* configure.in: check for sys/time.h; substitute and check for AR;
	check for nice()

	* Makefile.in: make python .PRECIOUS; define OPT=-O and pass it to
	submakes

	* */Makefile*in: set OPT=-O; set AR=@ar@

	* Modules/Setup.minix: new

	* Lib/audiodev.py: only import system specific modules if needed

Thu Jan 13 16:40:28 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/flmodule.c: make type objects static

	* Modules/almodule.c: make type objects static

	* Makefile.in: add rule to build Makefile; add VPATH for that;
	remove dependency on configure script (you can run 'make autoconf'
	instead); add Lib/test to path for test target;

	* Lib/test: new subdirectory, holds all test modules

Wed Jan 12 10:17:41 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* acconfig.h: added HAVE_ALTZONE

	* configure.in: test for altzone; check for working
	termcap/termlib when --with-readline used; don't test for readline
	function; send errors to stderr

	* Lib/test_grammar.py: fix 64-bit int test for max negative int

	* Python/import.c (get_module): call dlerror() when dlopen() fails
	(also some layout changes)

Tue Jan 11 10:56:00 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Python/import.c: use RTLD_NOW (define as 2 if undefined)

	* Makefile.in: "make (local)clean" shouldn't bother about Include;
	added .PRECIOUS: config.status

	* Modules/md5.h: define PROTOTYES as 1 if HAVE_PROTOTYPES is
	defined

	* Modules/md5module.c: grand cleanup

	* Modules/Setup.sgi: renamed to Setup.irix4

	* Modules/Setup.sunos5: renamed to Setup.solaris2

	* Modules/Setup.in: some makes (e.g. Ultrix) don't strip trailing
	whitespace from variable definitions -- make sure there isn't any
	in the defs used to generate PYTHONPATH

	* Many modules and objects: use 'staticforward' where needed

	* Include/object.h: added #define 'staticforward' as either static
	or extern depending on BAD_STATIC_FORWARD

	* acconfig.h: added BAD_STATIC_FORWARD

	* configure.in: added test for bad static forward

Mon Jan 10 10:35:21 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/md5module.c: SCO ODT 3.0 dependent fix

	* Objects/xxobject.c: quote size fields as tp_basicsize instead of
	(incorrectly) tp_size

	* Objects/listobject.c (cmp): arguments must be const!!!

	* Modules/imageopmodule.c: another attempt at casting away
	warnings about changed semantics in ANSI C

	* Modules/regexpr.c: cast away warning about changed semantics in
	ANSI C

	* Modules/Makefile.pre.in: add LIBC_S (shared version of -lc, to
	be figured out by configure)

	* README, Python/version.c: version 1.0.0 BETA 6

	* README: fixed description of Setup (which was buried under the
	SVR4 exception!); added description of --prefix, --exec-prefix,
	--with-libm and --with-libc

	* configure.in: added --with-libc=... and --with-libm=...

	* Modules/Makefile.pre.in: Remove dependency of Setup on Setup.in,
	so it is only copied when Setup does not exist at all; add
	prefix=/usr/local so Setup can base default path on --prefix
	option to toplevel configure script

	* Modules/Setup.in: clarified build procedure in comments; don't
	include GNN's timing module by default; use $(prefix) instead
	requiring manual edit of DESTDIR

	* Makefile.in: replace DESTDIR by prefix and exec_prefix and
	updated affected targets; added inclinstall and libainstall
	targets

	* Objects/accessobject.c: removed (???) from comment to avoid
	trigraph warning

	* Makefile.in (libinstall): correct typo: (D)DESTDIR

Fri Jan  7 10:34:43 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* README: describe --with-sgi-dl and --with-dl-dld

	* Python/Makefile.in: compile import.c with -I$(DLINCLDIR)

	* Python/import.c: check for WITH_SGI_DL and WITH_DL_DLD

	* acconfig.h: added WITH_SGI_DL and WITH_DL_DLD

	* configure.in: added --with-sgi-dl=DIR and
	--with-dl-dld=DIR,DIR; now require --with-readline=DIR and test
	for existing directory

	* Lib/test_audioop.py: new module to test (you guessed it) audioop

	* Modules/audioopmodule.c: got rid of adpcm32lin and lin2adpcm3 --
	Jack says they're not useful

========================================================================
Release of 1.0.0 BETA 5 (Jan 6 1994)
========================================================================

Thu Jan  6 13:36:32 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* readline/Makefile: remove some cruft so it works with VPATH

	* Lib/aifc.py: remove dependencies on AL (Sjoerd)

	* README: describe new Setup procedure

	* Modules/Makefile.pre.in: copy Setup from $9srcdir)/Setup.in so
	it *really* works with VPATH

	* Modules/Setup: renamed to Modules/Setup.in

	* Python/pythonmain.c (realmain): fclose script file

	* Python/import.c (get_module): fix important leak: close the .py
	file after parsing!

	* README, Python/version.c: version 1.0.0 BETA 5

Wed Jan  5 16:42:35 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Modules/rgbimgmodule.c: Only include <unistd.h> if it exists

	* Modules/timemodule.c: don't include sys/time.h on the Mac

	* Modules/stdwinmodule.c (initstdwin): don't fuss with sys.argv on
	the mac -- so {check,putback}stringlist aren't needed there

	* Parser/intrcheck.c: Make sure <MacHeaders> is included before
	any other include file

	* Modules/audioopmodule.c: include math.h after allobjects.h (so
	the latter can be a precompiled header file on the Mac)

Wed Jan  5 15:34:26 1994  Guido van Rossum  (guido@poseidon.cwi.nl)

	* Python/pythonrun.c (sighandler): only call kill(getpid()) if
	getpid() exists; otherwise call exit(1)

	* configure.in: added test for getpid()

	* Modules/config.c.in: Changes for Macintosh: new default path,
	call wargc() in main(); 1994 copyright

	* Python/frozenmain.c: added declarations for getversion() and
	getcopyright() (foei!); insert "Python " before version on banner

	* Python/pythonmain.c: added declarations for getversion() and
	getcopyright() (foei!); default startupfile to "PythonStartup" on
	Macintosh; add fclose(fp) for startupfile; insert "Python " before
	version on banner

========================================================================
Release of 1.0.0 BETA 4 (Jan 5 1994)
========================================================================

Wed Jan  5 01:21:59 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* README, version.c: bumped version to 1.0.0 BETA 4

	* README: removed all references to --with-solaris; updated list
	of files and directories

	* Modules/sunaudiodevmodule.c: define SOLARIS if
	HAVE_SYS_AUDIOIO_H is defined

	* Python/thread.c: define SOLARIS if HAVE_THREAD_H is defined

	* configure.in: added test for <thread.h> (SOLARIS thread
	interface); remvoe test for --with-solaris

========================================================================
Release of 1.0.0 BETA 3 (Jan 5 1994)
========================================================================

Wed Jan  5 00:18:45 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* {Parser,Objects,Python,Makefile}/Makefile*in: made depend target
	work with VPATH

	* README: describe new build procedure; added section on building
	for multiple architectures

	* acconfig.h: fix (reversed!) comment for SYS_SELECT_WITH_SYS_TIME

	* Modules/Makefile.pre.in: copy Setup from $(srcdir) if not
	present, and use local Setup as input for makesetup script

Tue Jan  4 12:32:16 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Note that there are no functional changes below -- just changes
	to the build process and changes to avoid compiler warnings

	* Modules/Setup: disable nis as well by default, change the
	pertaining comments, and change the comments about the multimedia
	modules to be default on

	* fixed all warnings about function pointer initializations, and
	miscellanous other warnings (e.g. about extern forward references
	to static variables); touched random bits of code as a consequence

	* changed configuration process and Makefiles to support VPATH;
	for this, config.h(.in) now lives to the toplevel directory, the
	toplevel Makefile is now created by configure as well, and various
	improvements to it have been made (e.g. working tags and TAGS
	targets), the makesetup script follows configure instead of
	preceding it, it understands srcdir and has an exception for
	glmodule.c, the intermediate file is called Makefile.pre, the
	Makefiles don't use TOP any more and are much more careful about
	the difference between .. and the toplevel directory, and I've
	improved my understanding of how configure handles srcdir

	* Modules/threadmodule.c: refuse to compile when WITH_THREAD is not
	defined

	* configure.in, acconfig.h, config.h.in, Include/ceval.h,
	Modules/{stdwin,thread}module.c, Python/{ceval,pythonrun}.c:
	renamed USE_THREAD to WITH_THREAD

	* configure.in: add AC_PROG_INSTALL

	* README, Python/version.c: version set to 1.0.0 BETA 3

	* Demo, Include, Lib: added Makefile with clean/clobber targets

	* README: added remarks on --with-svr4; unnumber special cases

	* configure.in: only look for -lnsl and -lsocket if --with-svr4 is
	specified, to avoid linking with them on IRIX 5

========================================================================
Release of 1.0.0 BETA 2 (Jan 3 1994)
========================================================================

Mon Jan  3 22:21:24 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* Include/myselect.h: fix typo in name of SYS_SELECT_WITH_SYS_TIME

	* Parser/pgen.h: moved here from Include; removed extern
	definition of 'gram'

	* Parser/acceler.c: include node.h, now needed by parser.h

	* README: added paragraph on testing

	* Misc/python.man: changed date and add 1994 copyright

	* Makefile: added test target

	* Python/thread.c: include config.h if needed

	* Parser/parser.h: remove references to struct _grammar and
	similar things

	* Modules/rotormodule.c (RTR_e_char, RTR_d_char): avoid warnings
	by picky compilers about unsigned % signed

	* README: added a section on building it for non-UNIX systems

	* Makefile (configure): call autoheader when calling autoconf

	* Include/config.h.in: now generated by autoheader

	* acconfig.h: new file (input for autoheader)

	* configure.in: added AC_REVISION call to top

	* Modules/flmodule.c (form_setattr): one NULL should be 0

	* Include/myselect.h: this now implies mytime.h and attempts to
	work around systems where sys/select.h and sys/time.h can't be
	included together

	* Modules/socketmodule.c, Doc/libsocket.tex: remove socket avail()
	method -- you can use select instead

	* Modules/Setup: disable dbm, it is not truly portable

	* Lib/sunau.py: incorporate one-line fix by Sjoerd

	* Include/pgenheaders.h: include <stdlib.h> if its symbol
	defined, not just on the mac

	* Include/grammar.h: remove redundant structure tags

	* Include/cgensupport.h: avoid possible macro argument
	substitution inside string literal

	* configure.in, Include/config.h.in: add test whether sys/select.h
	and sys/times.h can be included by the same program

	* Include/config.h.in: add lines for HAVE_SYS_UN_H and
	HAVE_GETPEERNAME

	* Extensions/mkext.py: copy change in library order from
	Modules/Makefile.in.in

	* Modules/Makefile.in.in: change library order subtly so -ltermcap
	follows instead of precedes -lgl_s on SGI systems; this solves
	(hides?) problems with clashing entry points

	* configure.in: added sys/un.h to list of tested header files;
	added getpeername to list of tested functions (both for
	Modules/socketmodule.c)

	* Modules/socketmodule.c: conditionally include sys/un.h and
	change tests for AF_UNIX to tests for HAVE_SYS_UN_H; test for
	HAVE_GETPEERNAME instead of NO_PEERNAME

	* Modules/config.c.in: add marshal and __main__ built-in modules

	* Python/sysmodule.c (list_builtin_module_names): sort the list

	* Doc/Makefile: remove 'qua' from default targets

	* Doc/README: add reference to ext.tex, change reference to
	lib*.tex, explain that qua isn't built by default

	* README: explain DESTDIR, clarify install procedure, add more
	explanation to some options, add description of ChangeLog, add
	wuarchive.wustl.edu to list of mirror sites

	* Modules/socketmodule.c: make AF_UNIX code dependent on existence
	of AF_UNIX (SCO ODT 3.0 doesn't support it -- let's hope it
	doesn't define the symbol either)

	* Makefile: attempt to fix install targets (added separate
	libinstall and maninstall)

	* Doc/libregex.tex: documented Tracy Tims' changes

	* Modules/regexpr.c: redid Tracy Tims' changes to minimize diffs
	(only two added lines now)

	* Modules/regexmodule.c: fix core dump when asking a plain regex
	object for a named group

Sun Jan  2 23:10:44 1994  Guido van Rossum  (guido@voorn.cwi.nl)

	* README, Python/version.c: changed version string to 1.0.0 BETA 2

	* Modules/{regexpr.{c,h},regexmodule.c}: merged in Tracy Tims'
	mods for named subexpressions

	* Include/regexpr.h: moved to Modules/regexpr.h

	* Modules/timingmodule.c: change tests for no arguments

	* configure.in: remove strtoul from AC_REPLACE_FUNCS; remove
	initial blank line (which got copied into configure so it wouldn't
	start with #!/bin/sh as required)

	* Python/compile.c: call mystrto(u)l instrad of strto(u)l

	* Python/Makefile.in: add mystrtoul.c to OBJS

	* Python/mystrtoul.c: renamed from strtol.c; renamed functions to
	mystrto(u)l; this is now a standard source file (since some
	systems have a strto(u)l that doesn't report errors properly)

	* Modules/Setup: added entry for timing module

	* Modules/{timing.h,timingmodule.c}: new files implementing GNN's
	timing module

========================================================================
Release of 1.0.0 BETA (Jan 1 1994)
========================================================================
