	Changes since 1.3beta3
	----------------------
- MkPluginAliases.py now works in a virgin distribution environment. It is
  also distributed as an applet.
- hexbin from binhex.py has been fixed
- various bits and pieces in readme files clarified
- mkapplet bug wrt owner resource (and, hence, trouble starting applets) fixed.
- Compiled with CodeWarrior 7.
- AE client modules generated with gensuitemodule.py now use keyword args.
- img modules updated to latest version (including pbm and sgi support).
- Everything compiled with all optimization options available. Let me know
  if you suspect errors that are due to this.

	Changes since Python 1.2 for the mac
	------------------------------------
- PPC python now uses a shared library organization. This allows the
  creation of dynamically loadable extension modules (contact me) and
  creation of python applets (see mkapplet.py). A number of previously
  builtin modules are now dynamically loaded. Dynamically loaded
  modules are distributed in the PlugIns folder.
- Python modules can live in 'PYC ' resources (with a name equal to the
  module name, so many modules can live in a single file). If you put a
  file (in stead of a folder) in sys.path its resources will be searched.
  See the PackLibDir script for creating such a file.
- new binhex module (partially working, hexbin has problems)
- Python now has a Preferences file, editable with
  EditPythonPrefs. Remembered are the python 'home folder' and the
  initial value for sys.path. If no preferences file is found a simple
  one is created.
  NOTE: this only works correctly if you start python the first time
  from the correct folder.
- new img modules, to read/write/convert images in various formats
- new MacOS toolbox modules: AE, Ctl, Dlg, Event, List, Qd, Res, Snd
  and Win. These provide access to various of the MacOS toolbox
  interfaces. No documentation yet, but the __doc__ strings provide at
  least the calling sequence (and Inside Mac will give you the
  semantics). Minimal demos are provided for most toolbox interfaces,
  and the 'scripts' directory has some more examples.
- AppleEvent client interfaces can be generated from aete/aeut
  resources. No support for objects yet, nor for server interfaces.
- Lib:mac:FrameWork.py has an application framework (under
  construction). 
- (PPC Only) support for building Python applets: tiny standalone
  python applications.
- fp = open(filename, '*r') opens resource-fork of a file for reading
  (and similar for writing).
- option-dragging a file to the interpreter (or immedeately pressing
  <option> after launching python) will bring up an Options dialog
  allowing you to set options like import-tracing, etc.
- MacOS module method added: GetErrorString(OSErr) -> error string
- There is now a numbering convention for resource-ID's:
  128-255	Resources used by the interpreter itself
  256-511	Resources used by standard modules
  512-		Resources for applications
- macfs module changes:
  - StandardGetFile without type arguments now shows all files
  - PromptGetFile(prompt, ...) is like StandardGetFile but with a
    prompt
  - GetDirectory (let user select a folder) added
  - GetFInfo and SetFInfo methods of FSSpec objects get/set finder
    info. FInfo objects have attributes Creator, Type, etc.
  - FindFolder (locate trash/preferences/etc) added
- mactcp/macdnr changes: bug fix wrt idle-loop.
- EditPythonPrefs script: change initial sys.path and python home
  folder
- (PPC only) MkPluginAliases: Setup aliases for dynamically loadable
  modules that live in a single shared library
- PackLibDir: Convert Lib directory to a single resource file
  containing all .pyc code
- fixfiletypes: Set file types based on file extension over a whole
  tree.
- RunLibScript: Run any script as main program, optionally redirecting
  stdin/stdout, supplying arguments, etc.
- binhextree: Binhex all files in a tree, depending on the extension.
- (PPC only) mkapplet: Create a python applet from a sourcefile and
  (optional) resourcefile.
  
	Known problems
	--------------
	
- 68K python reacts rather violently to out-of-memory situations. In
  stead of raising MemoryError it will crash, possibly bringing down the
  whole system. This is being investigated.
- The installation procedure is baroque. Ideas for improvement are welcome.
- The full documentation should be ported to AppleGuide. This should be
  a fairly simple automatic translation but I am not well-versed enough in
  AppleGuide to do it. Any takers?
- stdwin still has trouble with getting the clipboard (for cut/copy). Any
  hints for fixing this will be looked into (but I am not going to spend
  ages on this, especially without anyone asking me to).
- Be careful when copy/pasting in the stdin/stdout window. If you type
  something when you have the insertion point is not at end-of-window you
  may experience a system hang. (thanks, Just!)


	What will change shortly
	------------------------
	
I am planning to do an intermediate release shortly (1.3.1??), mainly
because Guido was so fast with 1.3 that I didn't have time to do some
things I wanted. Expect the following changes shortly (note that some are
incompatible):
- CFM68K support,bringing applets and dynamic loading to the 68K macs.
- Bgen-generated toolbox interfaces will go to a different place,
  probably :Lib:mac:toolbox
- Resource objects now often perform the role of a Handle object. This
  will change with the introduction of a Handle object and some sort of
  simulated inheritance.
- AE suites generated with gensuitemodule will be restructured, whereby it
  will be easier to override/extend standard suites. Also, server suites
  will also be generated, and hopefully objects will be supported.
- Event handling is currently rather messy, with python, SIOUX, stdwin and
  the python application all fighting over the events. This will somehow
  be changed.
  
  
  		Jack Jansen, jack@cwi.nl
  		10-Oct-95
