Changes in 2.1b1 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.

- The good news: this release is Carbon-based, so it runs natively on MacOS 8.6 or
  later and MacOSX.
- Alternatively there is a classic PPC interpreter as well. There are two reasons you
  might want to use this: (a) you have a pre-MacOS9 system and don't want to install
  CarbonLib, or (b) you need Tkinter, for which no Carbon version is available yet.
- 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. [*]
- Classic PPC is included again. [*]
- Numeric is included again. It is now built using distutils, and lives in :Lib:site-python.
  This makes it a lot easier to replace Numeric with a new version (when one comes out). [*]
- PIL is included again. [*]
- PythonInterpreterCarbon and PythonInterpreterClassic are now files of type "Atmp", not
  "APPL", so there should not be any confusion as to what the real application is
  (PythonInterpreter). [*]
- PythonIDE used to burn CPU cycles when idle, this has been fixed. PythonInterpreter
  still has the problem. [*]
- A BBEdit language module by Chris Stern is included in the :Mac:Contrib folder. [*]
- The ConfigurePython applets will now detect if the preference file refers to a different
  folder than where they live. They offer to remove the preference file in this case. [*]


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.1 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.
- After running a Tkinter program your menubar may end up dead, with command-alt-escape
  the only way to terminate Python.
- Tkinter file events do not work, unless you have opened the file through Tcl (but then
  you cannot access it from Python).
- 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.
- PythonInterpreter used interactively will eat a lot of processor cycles. You should use
  PythonIDE for interactive work and PythonInterpreter for scripts only.
- Under MacOSX Public Beta ConfigurePython cannot put PythonCore in the global CFMSupport
  folder. Therefore applets have to live in the Python folder, otherwise they cannot find
  PythonCore. There is a workaround if you want to have an applet in a different folder:
  put an alias PythonCoreCarbon (pointing to the PythonCoreCarbon in the Python folder)
  in the same folder as your applet.
  This problem should in all probability not occur in the release version of MacOSX.
