	Release notes for MacPython 1.5.1
	---------------------------------
	
Open Issues and bugs:

- Packages ("dotted import") appears to have problems for the cfm68k
  version of MacPython. Please report anything of interest you find as
  soon as possible, preferrably to pythonmac-sig@python.org. I no longer
  have access to a reasonable 68K machine, so it may well be that this
  means the demise of cfm68k Python is near.
- Printing a NumPy "array([1.2])" may cause a crash in
  cfm68k-Python. Same comments as above.

Changes since the previous version:

Here are the mac-specific changes since MacPython 1.4, with
end-user-visible changes near the top and API changes and other things
that are developer-only more to the bottom. Changes marked with a [*]
are new changes since 1.5b3 (there has never been a MacPython 1.5
final). And, of course, all Guido's 1.5.1 changes are
incorporated.

- Imported modules are now case-checked: the case of the filename
  should match the name under which you import it [*]
- There is now some minimal documentation on building true standalone
  applications in Python, see building.html [*]
- Python's private resources now use numbers from 228 up, because of
  conflicts with Tk. This may affect you if you include private
  resources in applets. [*]
- Audio_mac spike bug fixed. [*]
- FrameWork menu cleanup fixed. [*]
- More MacOS errors now have a (somewhat) symbolic description. [*]
- mactty module added to allow basic access to a serial line. [*]
- toolbox modules have been regenerated, occasionally giving access to 
  new functionality. They are now based upon Universal Headers version 
  3.1 [*]
- Waste module now uses Waste 1.3 [*]
- Waste module now exports WE{Get,Set}TabSize [*]
- Ordinal support in aetypes added (by Bill Bedford) [*]
- ColorPicker module added (by Just van Rossum). It isn't documented,
  but the docstring should be good enough. [*]
- Printing module added (by Just van Rossum). It isn't documented and
  it isn't easy to understand, but with Inside Mac beside you it might 
  be useable. There's a test script in Mac:Lib:test. [*]
- Sndihooks module added to give access to sound-input. Only lightly
  tested and not documented yet. [*]
- fstat() added to mac module. [*]
- double dispose in MacOS.splash() fixed. [*]
- Qt module now supports getting/setting movie times [*]
- BuildApplet now also accepts old applets as input, which are updated 
  to the current Python version [*]
- Moved Mac:Lib:toolbox and scripting to lib-toolbox and
  lib-scripting, analogous to Guido's changes. Initial sys.path settings
  reflect this change
- Added cPickle and cStringIO modules
- Balloon help in set-preferences dialog and EditPythonPrefs
- An interface to the Help Maganer has been added
- New modules "preferences" and "pythonprefs" which allow access to
  Python preferences and implements a general preference-handling
  framework. New EditPythonPrefs uses this.
- Applescript suite modules are now in a separate Mac:Lib:scripting
  folder
- Most modules now export their type objects
- MacOS.SysBeep() and MacOS.GetTicks() added
- sys.prefix and sys.exec_prefix are now set correctly
- Installation is now through an installer 
- mkapplet and MkPluginAliases have been renamed to BuildApplet and
  ConfigurePython 
- Applescript classes and properties are now exported by suites. Very
  sketchy documentation added to applescript.html 
- Tkinter now uses tcl/tk 8.0 
- imports should be faster due to caching path information 
- Generated suites now live in Mac:Lib:scripting 
- Added zlib module 
- Tkinter setfilehandler() did not work for sockets, fixed 
- "Delay console window" option didn't work, fixed. Also check out the
  quietconsole.py module 
- Menu bar is restored (if needed) when keeping console open after
  exit 
- Influencing command-. and event processing (formerly MacOS.SetYield
  and MacOS.SetScheduleTimes) has been changed, see the manual 
- FrameWork (or your own windowing code) can use asynchronous
  callbacks to keep user interface responsive during long computations 
- Module to interface to Internet Config added
- Module calldll added that allows calling of arbitrary C routines
  from MacOS toolboxes
- gdbm module added
- ctb error handling fixed, and some memory leaks plugged
- Various of the documentation files in Mac:Demo have been updated
- MacOS.string_id_to_buffer is a new hack: the number you have to
  add to the id() of a string object to get the (data) memory address
- MacOS.splash() double-free fixed
- macfs.FSSpec.as_pathname() was incorrect for disk toplevel folders
- QT.NewMovieFromFile has an extra parameter and an extra return value
- EasyDialogs.ProgressBar has changed both in layout and interface
- FrameWork.Application has a new cleanup() method which asks all windows
  to close themselves.
- Loading of PYC resources from the application greatly speeded up,
  especially for CDROM based applications
- interrupt check/eventloop only entered 10 times per second, giving
  big speedup
- Allow any object (file, folder, disk) to be dropped on an applet
- Twit resource number conflict with debuggee fixed
- sys.path preference can now be longer than 255 chars
- cfmfile module allows parsing and merging of CFRG resources
- PythonFAT and PythonApplet are now fat (PPC/CFM68K) applications, so
  applets can be moved between architectures.
- Twit resource number conflict with debuggee fixed
- mkapplet now uses a progress bar in stead of print statements
- unshar made a bit more mac-friendly (input output dialogs)
- img: added png, xbm, bmp support
- img: jpeg now uses IJG v6 library
- img: import of imagefile support modules delayed until needed
- img: better error handling for truncated images and such
- img: imgop.unpack() can unpack formats with multiple pixels per byte

- build numbers work and are maintained in macbuildno.h by fullbuild.py
- We now use CW Pro 1, with multitarget projects and such goodies 
- fixed xx plugin project for cfm68k 
- All files updated to new Py_ naming convention
- Toolbox modules regenerated from new Universal Headers
- nfullpath() merged into PyMac_GetFullPath()
- Added support for Metrowerks profiler
- Standard MW/MSL runtime libraries used in stead of homegrown version
- Allow any object (file, folder, disk) to be dropped on an applet
- Malloc now returns cache-line-aligned memory on PPC, which speeds
  things up, especially on a 604. Dictionaries put this to good use.
- statically linked pythons won't inadvertantly load .slb modules
- Removed dependencies on PLStringFuncs and/or StdCLib
- Project "segment" structure changed to more-or-less follow folder
  structure
- fullbuild redesigned
- Added PyMac_Initialize() call, for use by embedding programs.
