Changes in 2.0b1+ since 1.5.2
-----------------------------

These release notes refer to Mac-specific changes only. See NEWS (in the Misc folder)
for machine-independent changes.

Unfortunately I have messed my administration up, so I can't give complete
Mac-specific release notes for the changes in this release. So, I will
have to leave it at the highlights:

- 68K support has been dropped, this release is PPC only.
- Threads support (through standard Python threads module).
- Tkinter works again! At least: it doesn't immedeately crash in obvious ways.
- Appearance support through App module and added calls in many other modules.
  Most dialogs and applets have also been converted to Appearance. There's also a
  ControlAccessor module that handles [GS]etControlData with their plethora of
  argument types.
- Navigation Services support, with macfs StandardFile calls transparently
  replaced by their NavServices counterparts.
- Offscreen QuickDraw and GWorld support through Qdoffs module.
- Drag manager support (Drag module).
- Much better CGI support and examples, see :Mac:Tools:CGI.
- Better OSA/AppleEvent support.
- Up/downcasting of handle-based types is now unified and implemented in the
  inherting module, e.g.
  handleobj = ctlobj.as_Resource()
  ctlobj = Ctl.as_Control(handle)
- Added macos.FreeMem(), MaxBlock() and CompactMem(), mainly so apps in Python can
  give low-memory warnings.
- MediaDescr module parses some QuickTime media descriptions (but definitely not all).
- A new method EasyDialogs.GetArgv() which makes it easy for the end-user to provide
  unix-style sys.argv arguments. (new since 2.0b1)
- There's a new package, mkcwproject, that creates and builds CodeWarrior
  projects. (new since 2.0b1)
- The "keep console open" options are now always, never, on error and on unseen output. The
  latter is the new default. (new since 2.0b1)
- Missing Numeric modules are included. They may not be on sys.path, however. (new since 2.0b1)
- gdbm works again. (new since 2.0b1)


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

- The garbage collection mods to 2.0 have not been enabled, mainly due to lack of test-time.
- Stackless Python/microthreads hasn't been ported to 2.0 yet. If/when it becomes available
  Just will undoubtedly announce it on pythonmac-sig.
- Carbon support is not in here, but should be happening as soon as GUSI is ready.
- Distutils is not in here, but Corran Webster and myself are working on it.

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

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

- The IDE and Tkinter do not work together. Run tkinter programs under PythonInterpreter.
- Aliases do not work in sys.path entries.
- Once you have used multiple threads you cannot raise KeyboardInterrupt anymore:
  typing command-. will immedeately exit the interpreter.
