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

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

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

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

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

sMon Jan  2 19:35:49 1995  Guido van Rossum  <guido@voorn.cwi.nl>

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