	Release notes for MacPython 1.5b3
	---------------------------------
	
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.
- import test.autotest fails the test_strftime test on %%. This is a bug in the
  MetroWerks C strftime() routine. Test_re takes a loooooooooong time, by the way.
- Tk menus may or may not work. Please let me know.
- Occasionally Python becomes non-reactive to mouseclicks after switching it to
  background and foreground again. If you experience this please let me know,
  explaining the circumstances.
- Printing a NumPy "array([1.2])" may cause a crash in cfm68k-Python. If you have
  a 68k machine, a MetroWerks debugger, time and interest in NumPy: please let me
  know and I'll ask you to help hunting this bug.

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.5a3 (there has not been a MacPython 1.5b1). And, of course, all Guido's
1.5-final changes are incorporated.

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