Changes in 2.1a3 since 2.0
--------------------------

These release notes refer to Mac-specific changes only. See NEWS (in the Misc folder)
for machine-independent changes. Changes since previous alfa/beta releases for 2.1 are
marked with [*] and at the bottom of the list. Note that 2.1a3 is a Mac-only release.
The machine-independent stuff is at a state somewhere between 2.1a2 and 2.1b1.

- The good news: this release is Carbon-based, so it runs natively on MacOS 8.6 or
  later and MacOSX.
- The bad news: this release is Carbon-only. The next alpha release will be both
  Carbon and classic PPC.
- Distutils is included and seems to work.
- There's a new module (package, actually) mkcwproject which builds CodeWarrior
  projects from simple templates. See Distutils or :Mac:scripts:genpluginprojects.py
  for examples of use.
- Windows and Dialogs can now be different beasts, so you may have to call
  dlg.GetDialogWindow() where you used to be able to call window methods straight
  on the dialog. This also has consequences for code using FrameWork.DialogWindow.
  THIS IS AN INCOMPATIBLE CHANGE.
- ctl.GetControlDataHandle() has been renamed to GetControlData_Handle(), and similarly
  for the other variants of GetControlData and SetControlData. This was needed
  because Carbon defines a completely different routine with the name GetControlDataHandle.
  THIS IS AN INCOMPATIBLE CHANGE.
- Method mac.xstat() has disappeared. THIS IS AN INCOMPATIBLE CHANGE.
- Menu.SetPopupData() and GetPopupData() are gone. Use SetPopupMenuHandle() and
  SetPopupMenuID() (and the getters) in stead. THIS IS AN INCOMPATIBLE CHANGE.
- Various methods have disappeared when running under Carbon. The script
  :Mac:scripts:missingcarbonmethods.py can check your sources, but you need unix to run
  it. Or use it as documentation and search by hand. THIS IS AN INCOMPATIBLE CHANGE.
- The good news is that "direct access to toolbox structs" still works from Python,
  so Python programmers have a lot less to fix than C programmers.
  That's because the lowlevel code simply uses the accessors internally. The accessors
  are available both in Carbon and Classic MacPython.
- Scrap under Carbon is, you guessed it, the Carbon Scrap Manager. Some workarounds are
  provided, though. THIS IS AN INCOMPATIBLE CHANGE.
- The Internet Config routines that are missing from Carbon have been removed. This
  is no problem if you use the "ic" module, but may be if you use "icglue" directly.
  THIS IS AN INCOMPATIBLE CHANGE.
- Various old toolbox names (CountMItems, EnableItem, etc) have disappeared. Use the
  new forms (CountMenuItems, EnableMenuItem, etc). THIS IS AN INCOMPATIBLE CHANGE.
- Waste now uses Waste 2.0.
- The default memory size for the interpreter has been upped again.
- The MacOS error messages have been updated to reflect the current state of
  things. This was long overdue.
- The crash in BuildApplication has been fixed.
- struct.pack related problems (in Audio_Mac, for example) have been fixed.
- (src/dev/cvs only): The project files now use the .mcp extension in stead of .prj.
  Projects for almost all plugins and the img modules are automatically generated
  with :Mac:scripts:genpluginprojects.py (also called by fullbuild). The .mcp files
  are not in the repository, if you don't want to use genpluginprojects you can import
  the .mcp.xml files in CodeWarrior.
- ConfigurePython has been replace by two applets: ConfigurePythonClassic and
  ConfigurePythonCarbon. These will select either execution model for machines
  supporting both, and it will also build all the standard applets. [*]
- Dlg.ModalDialog() almost invariably crashed. This showed in EasyDialogs, EditPythonPrefs
  and meny other things. Fixed. [*]
- Carbon MacPython did not work with CarbonLib 1.1 or later. Fixed. [*]
- IDE flashed a window and complained about it. Fixed, by getting rid of regex in
  favor of re. Code not fully tested. [*]
- IDE could crash on some edit operations due to WEGetUndoInfo(). Fixed. [*]
- time.time() again returns positive values. [*]


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

- The garbage collection mods 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 and the MacPython homepage.

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.
- The menu bar isn't always correctly restored before MacPython turns to <<terminated>>.
- Under Carbon only you may occasionally see a spurious KeyboardInterrupt. I have absolutely
  no clue as to what is causing this.
