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)
========================================================================
