Changes in 2.2b2 since 2.1.1
----------------------------

These release notes refer to Mac-specific changes only. See NEWS (in the Misc folder)
for machine-independent changes. Changes that are new in 2.2b2 are flagged as such.


- The main change is that all toolbox modules have moved to a package called Carbon.
  So things like "import Res" should be changed to "from Carbon import Res", and
  "from Res import *" to "from Carbon.Res import *". Please see the readme file for
  some open questions and join the discussions on pythonmac-sig if you have anything
  to contribute. Aside from reducing clutter this change will also benefit the
  port to Mach-O/OSX Python later.
- On input MacPython now accepts either \n (unix style) or \r (mac style) newlines
  for text files. This behaviour can be turned off with a preference.
  This is an experimental feature; again: feedback is requested.
- Command-dot handling has been improved a lot: scripts are now much easier to interrupt,
  and they only scan for cmd-. while in the foreground. [2.2b2]
- "Copy" from the MacPython console window was always disabled. Fixed. [2.2b2]
- This release should run on MacOS 8.1 again. [2.2b2 build 116]
- A new, rather different GUSI I/O library is used. Please report any strange behaviour
  with I/O to the pythonmac-sig mailing list! [2.2b2]
- There is a new module macresource which makes it easier to open a resource file
  accompanying your script when the script is not (yet) converted to an applet.
  This module will later also do the right thing in Mach-O/OSX Python.
- A new, experimental module hfsplus is included, which gives access to some of the
  functionality of the HFS+ API. [2.2b2]
- Threads had a stack that was too small for many serious Python applications (20K).
  They now get 64K. There is still no overflow check, though.
- Garbage collection and the gc module have (finally) been enabled.
- EasyDialogs.ProgressBar now has indeterminate progressbars if you specify maxval=0.
  This is also the new default. Patch supplied by Dean Draayer.
- There are new preferences for enabling old-style division warnings and for
  accepting unix-style newlines in text input files. These can also be set during
  startup, and in addition you can select very verbose import tracing.
- The NavServices override for StandardFile has moved from early startup to the
  time you import macfs. This speeds up MacPython startup.
- Various outdated scripts have been moved to :Mac:Unsupported.
- Various outdated items from :Mac:Lib:test have been removed.
- C Developers: you know have control over the Python console if you are embedding
  MacPython in another application, thanks to Alexandre Parenteau. :Mac:Demo:embed.html
  has very minimal documentation.
- BuildCGIApplet works again.
- The CodeWarrior OSA suite missed quit(). It is back.
- Contrib:morefindertools is gone, the functionality has been integrated into
  the standard module findertools.py.

What is not in this distribution
--------------------------------

- Stackless Python/microthreads hasn't been ported to 2.2 yet. If/when it becomes available
  Just will undoubtedly announce it on pythonmac-sig and the MacPython homepage.
- The toolbox modules have not been updated to Universal Header 3.4 or CarbonLib 1.4 yet.

Known problems
--------------

This list is probably incomplete, more problems may be listed on the MacPython homepage,
http://www.cwi.nl/~jack/macpython.html.

- MacPython 2.2b2 (and MacPython 2.1) will not run correctly on a multiprocessor MacOS X
  machine, it will quickly deadlock during I/O operations. The GUSI I/O library is suspected,
  hints/clues/workarounds are solicited.
- Tkinter does not work under Carbon.
- The IDE and Tkinter do not work together. Run tkinter programs under PythonInterpreter.
- Tkinter file events do not work, unless you have opened the file through Tcl (but then
  you cannot access it from Python).
- Aliases may not work in sys.path entries.
- PythonInterpreter used interactively will eat a lot of processor cycles. You should use
  PythonIDE for interactive work and PythonInterpreter for scripts only. This is especially
  true under OSX.
- AliasMenu 2.2 conflicts with the Carbon version of Python. This is most likely a problem
  with AliasMenu (which is from 1999, and thus predates Carbon altogether).
