mirror of https://github.com/python/cpython
Changed release note structure:
- Relnotes contains current release notes - HISTORY contains all old release notes
This commit is contained in:
parent
001aa86d34
commit
7701fd9af2
|
@ -0,0 +1,602 @@
|
|||
This file contains the release notes of older MacPython versions.
|
||||
|
||||
Changes between 1.4 and 1.3.3
|
||||
-------------------------------
|
||||
|
||||
Aside from all the changes Guido made to the machine-independent part
|
||||
of Python (see NEWS for those)the following mac-specific changes have
|
||||
been made:
|
||||
|
||||
- Preference file and other items in the System folder now have the
|
||||
version number in their name, so old and new python installations
|
||||
can coexist.
|
||||
- Fixed a GUSI crash when exiting with files open.
|
||||
- Fixed interference with some extensions that added resources that
|
||||
looked like ours.
|
||||
- Fixed slowness of Python in the background.
|
||||
- About box added (at last...).
|
||||
- New release of CWGUSI (1.8.0) incorporated. Note that for Tcl/Tk the
|
||||
4.1p1 release is still used (4.2 was a little too late). Everything
|
||||
ported to CW10.
|
||||
- Applets can now turn off argc/argv processing (so they can do their
|
||||
own initial AppleEvent handling). Applets can also delay opening the
|
||||
console window until it is actually used (and, hence, not open it at
|
||||
all by refraining from using it).
|
||||
- MiniAEFrame: Preliminary AppleScript server support. Example code
|
||||
provided, including an initial stab at writing CGI scripts in Python.
|
||||
- macfs: FindApplication() locates application given 4-char creator
|
||||
code.
|
||||
- macfs: GetDates and SetDates get and set creation date, etc.
|
||||
- FrameWork: preferred method of ending mainloop() is calling _quit().
|
||||
- FrameWork: different menubar handling resulting in less flashing
|
||||
during menu creation.
|
||||
- FrameWork: added setarrowcursor and setwatchcursor functions.
|
||||
- findertools: new module that makes various finder features
|
||||
available.
|
||||
- macostools: copy file times too.
|
||||
- macostools: added touch() to tell finder about changes to a file.
|
||||
- macerrors: New module with symbolic names for all os-releated
|
||||
errors.
|
||||
- EasyDialogs: ProgressBar fixed.
|
||||
- aetools: start application if needed
|
||||
- aetools: use aetools.error for server-generated errors, MacOS.error
|
||||
for communication errors, etc.
|
||||
- Finder_7_0_Suite: New module with the "simple" finder scripting
|
||||
interface.
|
||||
- mac (aka os): xstat() returns resourcesize, creator, type in
|
||||
addition to stat() information.
|
||||
- MacOS: added DebugStr method to drop to low-level debugger.
|
||||
- MacOS: fixed splash() to actually draw the splash box:-)
|
||||
- Ctl: fixed very nasty bug in DisposeControl and object deletion.
|
||||
- Dlg: Added GetDialogWindow and other accessor functions
|
||||
- Waste: fixed bug with object hanlder installation
|
||||
- Waste: added tab support
|
||||
- time: added strftime
|
||||
- twit: a windowing debugger for Python (preliminary release)
|
||||
- BBPy: a BBEdit extension that send scripts to the Python interpreter,
|
||||
by Just van Rossum.
|
||||
|
||||
The following set of changes were already in place for the 1.4b3
|
||||
release:
|
||||
- The standard 68K Python is built for CFM68K. This means that PPC and
|
||||
68K Python are now largely compatible, both supporting dynamically
|
||||
loaded modules, python applets, etc.
|
||||
As a result of this there have been numerous subtle changes in
|
||||
filenames for PPC plugin modules and such, but these changes should
|
||||
be transparent to Python programs.
|
||||
The one missing module in cfm68k is Macspeech, for which no CFM68K
|
||||
interface library is available (yet?).
|
||||
- Raise MemoryError on stack overflow.
|
||||
- Python now always uses 8-byte doubles.
|
||||
- Removed mactcp, macdnr and stdwin modules from standard
|
||||
distribution.
|
||||
- New releases of Tcl/Tk (4.1p1), CWGUSI (1.7.2) and Waste (1.2f) have
|
||||
been incorporated.
|
||||
- Macfs.SetFolder method added, which sets initial folder for standard
|
||||
file dialogs.
|
||||
- New py_resource module to handle PYC resources.
|
||||
- List mgr objects "selFlags" and "listFlags" members now accessible.
|
||||
- QuickDraw got a few new symbolic constants.
|
||||
- Qt and Cm modules now live in a separate dynamically loadable
|
||||
module, so other toolbox modules work if you don't have QuickTime
|
||||
installed.
|
||||
- Old sound mgr calls {Set,Get}SoundVol removed, version number
|
||||
interface changed.
|
||||
- Added convenience routines setarrowcursor and setwatchcursor to
|
||||
FrameWork.
|
||||
- Bugfixes to time.sleep(), FrameWork, macostools,
|
||||
- Minor fixes/additions/updates to demos and documentation in the Demo
|
||||
folder.
|
||||
- Internal changes:
|
||||
- Ported to CW9
|
||||
- mwerks_????_config.h organization rationalized
|
||||
- Projects renamed to reflect architecture (ppc, cfm68k, 68k).
|
||||
- various defines (HAVE_CONFIG_H, USE_MAC_DYNAMIC_LOADING) no longer
|
||||
needed.
|
||||
- shared-library architecture made more conforming to metrowerks
|
||||
documentation. Check xx plugin projects if you have built your own
|
||||
dynamically loaded modules.
|
||||
|
||||
|
||||
Changes between 1.3.3 and 1.3.2
|
||||
--------------------------------
|
||||
|
||||
A major change since 1.3.2 is in the organization of the files: The
|
||||
Mac folder has mac-specific demo programs, attempts at documentation and
|
||||
more. Browse the HTML files in Mac:Demo for more info.
|
||||
|
||||
Also, Toolbox:bgen is not needed anymore for normal use: the relevant
|
||||
python modules have been moved to Mac:Lib:toolbox.
|
||||
|
||||
Other changes:
|
||||
- Uses final Tk 4.1 and Tcl 7.5 distributions.
|
||||
- Override preferences (stored in the interpreter/applet application)
|
||||
allow overriding of system-wide preferences. Explained in
|
||||
"using.html".
|
||||
- New functionality in FrameWork.py:
|
||||
- ScrolledWindow class
|
||||
- enable(), settext(), setitem(), setmark(), seticon(),
|
||||
checkmenu() and delete() methods for menu entries.
|
||||
- event parameter added to idle() method
|
||||
- windowbounds() function helps programmer with staggering windows.
|
||||
- Erase only visRgn on an update event.
|
||||
- TextEdit interface module added
|
||||
- Waste interface module added
|
||||
- Demos for waste, including skeleton for html editor
|
||||
- Scrap manager interface added
|
||||
- Ctl.FindControl() could return reference to deleted object. Fixed.
|
||||
- GrafPorts have an _id attribute (address of grafport) allowing them
|
||||
to be compared (since a new python object is created each time).
|
||||
- Standard File folder no longer changed on chdir() (this was
|
||||
introduced in 1.3.2).
|
||||
- sys.argv can now be set if you option-drag or option-click a python
|
||||
source.
|
||||
- Various dialogs now have sensible defaults.
|
||||
- binhextree is now a bit more intelligent about when to binhex.
|
||||
- gensuitemodule fixed to hand '****' type arguments.
|
||||
|
||||
Changes between 1.3.2 and 1.3.1
|
||||
-------------------------------
|
||||
|
||||
The main reason for the 1.3.2 distribution is the availability of Tk
|
||||
for the mac. The Tk port and its integration in Python is definitely
|
||||
not bug-free, hence this distribution should be treated as beta
|
||||
software at best.
|
||||
|
||||
Another major change in this release is that the Python I/O system is
|
||||
now based on the GUSI library. This is an I/O library that attempts to
|
||||
mimic a Posix I/O system. Hence, modules like socket and select are
|
||||
now available in MacPython. If you build dynamically loaded modules
|
||||
and you use any unix-like feature such as stat() calls you should
|
||||
compile using the GUSI include files.
|
||||
|
||||
A third major change is that the MacOS creator code has been changed
|
||||
from 'PYTH' to 'Pyth', due to a conflict. This means that you will
|
||||
have to change the creator of all your old python programs. The
|
||||
distribution contains a script "FixCreator.py" that does this
|
||||
recursively for a whole folder.
|
||||
|
||||
Here are all the changes since 1.3.1, in no particular order:
|
||||
- complex number support added
|
||||
- cmath module added
|
||||
- startup options ("option-drag" dialog) can be retrieved from the
|
||||
preferences file. EditPythonPrefs hasn't been updated yet, though.
|
||||
- Creator changed from PYTH to Pyth
|
||||
- {mac,os}.unlink is now also called {mac,os}.remove
|
||||
- {mac,os}.mkdir second arg optional
|
||||
- dup and fdopen calls added
|
||||
- select module added
|
||||
- socket module added
|
||||
- open(file, '*r') for opening resource forks has been removed. It is
|
||||
replaced by MacOS.openrf(file, 'r'), which returns a simple
|
||||
file-like object to read (or write) resource forks.
|
||||
- Added AppleEvent URL suite
|
||||
- Added AppleEvent netscape suite
|
||||
- QuickDraw globals are now all accessible, as Qd.qd.xxxx
|
||||
|
||||
|
||||
Mac-specific changes between 1.3 and 1.3.1
|
||||
--------------------------------------
|
||||
|
||||
Aside from the changes mentioned here there have also been some
|
||||
changes in the core python, but these are not documented here.
|
||||
However, these changes are mainly bugfixes, so there shouldn't be any
|
||||
incompatabilities.
|
||||
|
||||
- imgsgi and imgpbm modules added
|
||||
- Various hooks installed to allow integration with MacTk (currently
|
||||
disabled)
|
||||
- Added support for MacOS Fixed type in toolbox arguments (represented
|
||||
as floats in python)
|
||||
- Added option to keep output window open on normal termination
|
||||
- Decreased minimum heapsize to run interpreter
|
||||
- Added progress-bar to EasyDialogs
|
||||
- Fixed socket.getportname()
|
||||
- Renamed MACTCP.py to MACTCPconst.py
|
||||
|
||||
- Many fixes to FrameWork.py:
|
||||
- Added window.SetPort() method
|
||||
- Added optional bounds and resid parameters to Window.open()
|
||||
- Fixed apple-menu DA handling
|
||||
- Fixed activate-event handling
|
||||
- Added default Application.makeusermenus() (File:Quit only)
|
||||
- Fixed bug with keyboard input handling
|
||||
- added idle() method, called from event loop if there are no events
|
||||
pending
|
||||
|
||||
Toolbox modules:
|
||||
- component manager module added
|
||||
- quicktime module added
|
||||
- font manager module added
|
||||
- Added color window support
|
||||
- Added support to obtain pixmap from a window
|
||||
- Added BitMap type
|
||||
- Added GrafPort type
|
||||
- Added support for PenState, Patterns, FontInfo, RGB colors,
|
||||
- Fixed GetPen and SetPt arguments
|
||||
- Added read access to members of {C}GrafPort objects
|
||||
- Added support for cursors
|
||||
- Provide access to some QuickDraw globals
|
||||
- Fixed InsetRect, OffsetRect, MapRect
|
||||
- Added support for various handles such as PatHandle, CursHandle
|
||||
- Added functions to access members of Window objects
|
||||
|
||||
|
||||
|
||||
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.
|
||||
|
||||
PYTHON 1.2 FOR THE MACINTOSH
|
||||
****************************
|
||||
|
||||
Python can be built on the Mac using either THINK C 6.0 (or 7.0), or
|
||||
CodeWarrior 5.0 (for 68K and PPC). In the past it has also been compiled
|
||||
with earlier versions of Think, but no guarantees are made that the
|
||||
source is still compatible with those versions. (Think C 5.0 appears
|
||||
to be OK.) Likewise, new compiler versions may effectively change the
|
||||
language accepted (or the library provided!) and thus cause problems.
|
||||
|
||||
MPW is a special case -- it used to be possible to build Python as
|
||||
an MPW tool using MPW 3.2, and this may still work, but I haven't
|
||||
tried this lately. What I have tried, however, is building Python
|
||||
as a shared library for CFM-68K, using the Symantec C compiler for MPW.
|
||||
See subdirectory MPW and the README file there for more info.
|
||||
|
||||
|
||||
1. Using Think C 6.0 (or 7.0)
|
||||
=============================
|
||||
|
||||
1.1 The directory structure
|
||||
---------------------------
|
||||
|
||||
I duplicate the UNIX directory structure from the distribution. The
|
||||
subdirectories needed to compile are: Mac, Include, Parser, Python,
|
||||
Objects, Modules. (Don't bother with Grammar and the parser
|
||||
generator, nor with the Doc subdirectory.)
|
||||
|
||||
For running and testing, you also need Lib and its subdirectories test
|
||||
and stdwin. You could also copy some things from the Demo/stdwin
|
||||
directory (unfortunately most other demos are UNIX specific and even
|
||||
many stdwin demos are).
|
||||
|
||||
Make sure there is no config.c file in the Modules subdirectory (if
|
||||
you copy from a directory where you have done a UNIX build this might
|
||||
occur). Also don't use the config.h generated on UNIX.
|
||||
|
||||
1.2 The project file
|
||||
--------------------
|
||||
|
||||
I put all source files in one project, which I place in the parent
|
||||
directory of the source directories.
|
||||
|
||||
1.2.1 Project type
|
||||
|
||||
(This is the Set Project Type... dialog in the Project menu.)
|
||||
|
||||
Set the creator to PYTH; turn on "far data"; leave "far code" and
|
||||
"separate strs" unchecked (they just serve to bloat the application).
|
||||
A partition size of 1000K should be enough to run the standard test
|
||||
suite (which requires a lot of memory because it stress tests the
|
||||
parser quite a bit) and most demos or medium-size applications. The
|
||||
interpreter will do basic things in as little at 500K but this may
|
||||
prevent parsing larger modules.
|
||||
|
||||
1.2.2 Compiler options
|
||||
|
||||
(This is the Options -> THINK C ... dialog in the Edit menu.)
|
||||
|
||||
- Start with Factory Settings.
|
||||
|
||||
- In the Prefix, remove #include <MacHeaders> and add
|
||||
#define HAVE_CONFIG_H
|
||||
|
||||
- Choose any optimizer and debugger settings you like. - You
|
||||
can choose 4-byte ints if you want. This requires that you
|
||||
rebuild the ANSI and unix libraries with 4-bytes ints as well
|
||||
(better make copies with names like ANSI 32 bit). With 4-byte
|
||||
ints the interpreter is marginally bigger and somewhat (~10%)
|
||||
slower, but Python programs can use strings and lists with
|
||||
more than 32000 items (with 2-byte ints these can cause
|
||||
crashes). The range of Python integers is not affected (these
|
||||
are always represented as longs). In fact, nowadays I always
|
||||
use 4-byte integers, since it is actually rather annoying that
|
||||
strings >= 64K cause crashes.
|
||||
|
||||
1.2.3 Files to add
|
||||
|
||||
(This is the Add Files... dialog in the Source menu.)
|
||||
|
||||
The following source files must be added to the project. I use a
|
||||
separate segment for each begin letter -- this avoids segment
|
||||
overflow, except for 'c', where you have to put either ceval.c or
|
||||
compile.c in a separate segment. You could also group them by
|
||||
subdirectory or function, but you may still have to split segments
|
||||
arbitrarily because of the 32000 bytes restriction.
|
||||
|
||||
- From Mac: all .c files.
|
||||
|
||||
- From Parser: acceler.c, grammar1.c,
|
||||
myreadline.c, node.c, parser.c, parsetok.c, tokenizer.c.
|
||||
|
||||
- From Python: bltinmodule.c, ceval.c, cgensupport.c,
|
||||
compile.c, errors.c, getargs.c getopt.c, graminit.c, import.c,
|
||||
importdl.c, marshal.c, modsupport.c, mystrtoul.c,
|
||||
pythonmain.c, pythonrun.c, sigcheck.c, structmember.c,
|
||||
sysmodule.c, traceback.c (i.e. all .c files except dup2.c,
|
||||
fmod.c, frozenmain.c, getcwd.c, getmtime.c, memmove.c,
|
||||
sigcheck.c, strerror.c, strtod.c, thread.c)
|
||||
|
||||
- From Objects: all .c files except xxobject.c.
|
||||
|
||||
- From Modules: all the modules listed in config.c (in the Mac
|
||||
subdirectory) in the initializer for inittab[], before
|
||||
"ADDMODULE MARKER 2". Also add md5c.c if you add md5module.c,
|
||||
and regexpr.c if you add regexmodule.c. (You'll find
|
||||
macmodule.c in the Mac subdirectory, so it should already have
|
||||
been added in a previous step.) Note that for most modules,
|
||||
the source file is called <name>module.c, but for a few long
|
||||
module names it is just <module>.c. Don't add stdwinmodule.c
|
||||
yet,
|
||||
|
||||
The following THINK C libraries must be added: from Standard
|
||||
Libraries, ANSI and unix; from Mac Libraries, MacTraps. I put each
|
||||
library in a separate segment. Also see my earlier remark on 4-byte
|
||||
ints.
|
||||
|
||||
1.4 Adding STDWIN
|
||||
-----------------
|
||||
|
||||
STDWIN is built in two separate projects: stdwin.pi contains the core
|
||||
STDWIN implementation from Ports/mac, textedit.pi contains the files
|
||||
from Packs/textedit. Use the same compiler options as for Python and
|
||||
the same general source setup (in a sister directory of the toplevel
|
||||
Python directory). Put all sources in the same segment. To
|
||||
stdwin.pi, also add Tools/strdup.c and Gen/wtextbreak.c.
|
||||
|
||||
The two projects can now be added as libraries to the Python project.
|
||||
You must also add stdwinmodule.c and add "#define USE_STDWIN" to the
|
||||
Prefix in the compiler options dialog (this only affects macmain.c and
|
||||
config.c).
|
||||
|
||||
Note that stdwinmodule.c contains an #include statement that
|
||||
references "stdwin.h" by relative path name -- if the stdwin toplevel
|
||||
directory is not a sibling of the python toplevel directory, you may
|
||||
have to adjust the number of colons in the pathname.
|
||||
|
||||
1.5 Resources
|
||||
-------------
|
||||
|
||||
Since I created them with ResEdit I have no text source of the
|
||||
resources needed to give the application an icon etc... You can copy
|
||||
the size, bundle, file reference and icon resources from the
|
||||
distributed Python application with ResEdit. THINK C automatically
|
||||
copies resources into the application file from a file
|
||||
<projectname>.rsrc.
|
||||
|
||||
1.6 Think C 5.0
|
||||
---------------
|
||||
|
||||
Tim Gilbert adds one note that will be helpful to future Think C 5.0
|
||||
users: When you have a really big project like python, and you want to
|
||||
compile and run it, if you just hit Command-R, often Think C will
|
||||
compile the remaining files, think for a moment, and then give you a
|
||||
warning "internal error(ZREF)--please remove objects." Don't listen
|
||||
to it. It is lying. What you should do instead is "Check Link..."
|
||||
and _then_ hit Run. Why? Ask Symantec.
|
||||
|
||||
|
||||
2. Using MicroWerks CodeWarrior 5.0
|
||||
===================================
|
||||
|
||||
Essentially, follow the instructions for Think C.
|
||||
|
||||
XXX Should at least list the project options.
|
||||
|
||||
|
||||
--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>
|
||||
<URL:http://www.cwi.nl/cwi/people/Guido.van.Rossum.html>
|
||||
|
||||
PYTHON RELEASE NOTES FOR THE MACINTOSH
|
||||
VERSION 1.1
|
||||
|
||||
For the most part, Python on the Mac works just like Python under UNIX.
|
||||
The most important differences are:
|
||||
|
||||
- Since there is no shell environment on the Mac, the start-up file
|
||||
has a fixed name: PythonStartup. If a file by this name exists
|
||||
(either in the current folder or in the system folder) it is executed
|
||||
when an interactive interpreter is started.
|
||||
|
||||
- The default search path for modules is different: first the current
|
||||
directory is searched, then the subdirectories 'lib', 'lib:stdwin' and
|
||||
'demo'. As always, you can change this (e.g. in your PythonStartup
|
||||
file) by assigning or appending to sys.path -- use Macintosh pathnames!
|
||||
(The default contains no absolute paths because these are unlikely
|
||||
to make sense on other people's hard disks.)
|
||||
|
||||
- The user interface for typing interactive commands is different.
|
||||
This is actually the THINK C console I/O module, which is based on
|
||||
the Mac toolbox TextEdit. A standard Edit menu provides Cut, Copy,
|
||||
Paste and Clear (Undo is only there for Desk Accessories). A minimal
|
||||
File menu provides Quit, which immediately exits the application,
|
||||
without the usual cleanup. You can Copy from previous output,
|
||||
but you can't scroll back beyond the 24x80 screen. The TAB key
|
||||
always brings you to the end of the current input line; indentation
|
||||
must be entered with spaces (a single space is enough).
|
||||
End-of-file is generated by Command-D; Command-Period interrupts.
|
||||
There is an annoying limit in the length of an input line to a single
|
||||
screen line (less the prompt). Use \ to input long statements.
|
||||
Change your program if it requires long lines typed on input.
|
||||
Even though there is no resize box, the window can be resized by
|
||||
dragging its bottom right corner, but the maximum size is 24x80.
|
||||
|
||||
- Tabs in module files are interpreted as 4 (four!) spaces. This is
|
||||
consistent with most Mac editors that I know. For individual files
|
||||
you can change the tab size with a comment like
|
||||
|
||||
# vi:set tabsize=8:
|
||||
|
||||
(exactly as shown here, including the colons!). If you are consistent
|
||||
in always using tabs for indentation on UNIX, your files will be
|
||||
parsed correctly on the Mac, although they may look funny if you
|
||||
have nicely lined-up comments or tables using tabs. Never using tabs
|
||||
also works. Mixing tabs and spaces to simulate 4-character indentation
|
||||
levels is likely to fail.
|
||||
|
||||
- You can start a script from the Finder by selecting the script and
|
||||
the Python interpreter together and then double clicking. If you
|
||||
make the owner of the script PYTH (the type should always be TEXT)
|
||||
Python will be launched if you double click it!
|
||||
There is no way to pass command line arguments to Python scripts.
|
||||
|
||||
- The set of built-in modules is different:
|
||||
|
||||
= Operating system functions for the 'os' module is provided by the
|
||||
built-in module 'mac', not 'posix'. This doesn't have all the
|
||||
functions from posix, for obvious reasons (if you know the Mac
|
||||
O/S a little bit). The functions in os.path are provided by
|
||||
macpath, they know about Mac pathnames etc.
|
||||
|
||||
= None of the UNIX specific modules ('socket', 'pwd', 'grp' etc.)
|
||||
exists.
|
||||
|
||||
= Module 'stdwin' is always available. It uses the Mac version of
|
||||
STDWIN, which interfaces directly with the Mac toolbox. The most
|
||||
important difference is in the font names; setfont() has a second
|
||||
argument specifying the point size and an optional third one
|
||||
specifying the variation: a single letter character string,
|
||||
'i' for italics, 'b' for bold. Note that when STDWIN is waiting
|
||||
for events, the standard File and Edit menus are inactive but
|
||||
still visible, and (most annoyingly) the Apple menu is also inactive;
|
||||
conversely, menus put up by STDWIN are not active when the Python is
|
||||
reading from the keyboard. If you open Python together with a text
|
||||
file containing a Python script, the script will be executed and
|
||||
a console window is only generated when the script uses standard
|
||||
input or output. A script that uses STDWIN exclusively for its I/O
|
||||
will have a working Apple menu and no extraneous File/Edit menus.
|
||||
(This is because both stdwin and stdio try to initialize the
|
||||
windowing environment; whoever gets there first owns the Apple menu.)
|
||||
LIMITATIONS: a few recent additions to STDWIN for X11 have not yet
|
||||
been added to the Mac version. There are no bitmap objects, and
|
||||
the setwinpos() and setwinsize() methods are non--functional.
|
||||
|
||||
- Because launching an application on the Mac is so tedious, you will
|
||||
want to edit your program with a desk accessory editor (e.g., Sigma
|
||||
edit) and test the changed version without leaving Python. This is
|
||||
possible but requires some care. Make sure the program is a module
|
||||
file (filename must be a Python identifier followed by '.py'). You
|
||||
can then import it when you test it for the first time. There are
|
||||
now three possibilities: it contains a syntax error; it gets a runtime
|
||||
error (unhandled exception); or it runs OK but gives wrong results.
|
||||
(If it gives correct results, you are done testing and don't need
|
||||
to read the rest of this paragraph. :-) Note that the following
|
||||
is not Mac-specific -- it's just that on UNIX it's easier to restart
|
||||
the entire script so it's rarely useful.
|
||||
|
||||
Recovery from a syntax error is easy: edit the file and import it
|
||||
again.
|
||||
|
||||
Recovery from wrong output is almost as easy: edit the file and,
|
||||
instead of importing it, call the function reload() with the module
|
||||
name as argument (e.g., if your module is called foo, type
|
||||
"reload(foo)").
|
||||
|
||||
Recovery from an exception is trickier. Once the syntax is correct,
|
||||
a 'module' entry is placed in an internal table, and following import
|
||||
statements will not re-read the file, even if the module's initialization
|
||||
terminated with an error (one reason why this is done is so that
|
||||
mutually recursive modules are initialized only once). You must
|
||||
therefore force re-reading the module with reload(), however, if this
|
||||
happens the first time you try to import the module, the import statement
|
||||
itself has not completed, and your workspace does not know the module
|
||||
name (even though the internal table of moduesl does!). The trick is
|
||||
to first import the module again, then reload it. For instance,
|
||||
"import foo; reload(foo)". Because the module object already exists
|
||||
internally, the import statement does not attempt to execute the
|
||||
module again -- it just places it in your workspace.
|
||||
|
||||
When you edit a module you don't have to worry about the corresponding
|
||||
'.pyc' file (a "compiled" version of the module, which loads much faster
|
||||
than the textual version): the interpreter notices that the '.py' file
|
||||
has changed (because its modification time has changed) and ignores the
|
||||
'.pyc' file. When parsing is successful, a new '.pyc' file is written;
|
||||
if this fails (no write permission, disk full or whatever) it is
|
||||
silently skipped but attempted again the next time the same module
|
||||
is loaded. (Thus, if you plan to place a Python library on a read-only
|
||||
disk, it is advisable to "warm the cache" by making the disk writable
|
||||
and importing all modules once. The standard module 'importall' helps
|
||||
in doing this.)
|
|
@ -0,0 +1,55 @@
|
|||
Release notes for MacPython 1.5a2, 28-May-97
|
||||
--------------------------------------------
|
||||
|
||||
Here are the mac-specific changes since MacPython 1.4, with end-user-visible
|
||||
changes near the top and API changes and other things that are developer-only
|
||||
more to the bottom:
|
||||
|
||||
- Module to interface to Internet Config added
|
||||
- Module calldll added that allows calling of arbitrary C routines
|
||||
from MacOS toolboxes
|
||||
- gdbm module added
|
||||
- ctb error handling fixed, and some memory leaks plugged
|
||||
- Various of the documentation files in Mac:Demo have been updated
|
||||
- MacOS.string_id_to_buffer is a new hack: the number you have to
|
||||
add to the id() of a string object to get the (data) memory address
|
||||
- MacOS.splash() double-free fixed
|
||||
- macfs.FSSpec.as_pathname() was incorrect for disk toplevel folders
|
||||
- QT.NewMovieFromFile has an extra parameter and an extra return value
|
||||
- EasyDialogs.ProgressBar has changed both in layout and interface
|
||||
- FrameWork.Application has a new cleanup() method which asks all windows
|
||||
to close themselves.
|
||||
- Loading of PYC resources from the application greatly speeded up,
|
||||
especially for CDROM based applications
|
||||
- interrupt check/eventloop only entered 10 times per second, giving
|
||||
big speedup
|
||||
- Allow any object (file, folder, disk) to be dropped on an applet
|
||||
- Twit resource number conflict with debuggee fixed
|
||||
- sys.path preference can now be longer than 255 chars
|
||||
- cfmfile module allows parsing and merging of CFRG resources
|
||||
- PythonFAT and PythonApplet are now fat (PPC/CFM68K) applications, so
|
||||
applets can be moved between architectures.
|
||||
- Twit resource number conflict with debuggee fixed
|
||||
- mkapplet now uses a progress bar in stead of print statements
|
||||
- unshar made a bit more mac-friendly (input output dialogs)
|
||||
- img: added png, xbm, bmp support
|
||||
- img: jpeg now uses IJG v6 library
|
||||
- img: import of imagefile support modules delayed until needed
|
||||
- img: better error handling for truncated images and such
|
||||
- img: imgop.unpack() can unpack formats with multiple pixels per byte
|
||||
|
||||
|
||||
- All files updated to new Py_ naming convention
|
||||
- Toolbox modules regenerated from new Universal Headers
|
||||
- nfullpath() merged into PyMac_GetFullPath()
|
||||
- Added support for Metrowerks profiler
|
||||
- Standard MW/MSL runtime libraries used in stead of homegrown version
|
||||
- Allow any object (file, folder, disk) to be dropped on an applet
|
||||
- Malloc now returns cache-line-aligned memory on PPC, which speeds
|
||||
things up, especially on a 604. Dictionaries put this to good use.
|
||||
- statically linked pythons won't inadvertantly load .slb modules
|
||||
- Removed dependencies on PLStringFuncs and/or StdCLib
|
||||
- Project "segment" structure changed to more-or-less follow folder
|
||||
structure
|
||||
- fullbuild redesigned
|
||||
- Added PyMac_Initialize() call, for use by embedding programs.
|
131
Mac/Relnotes-1.1
131
Mac/Relnotes-1.1
|
@ -1,131 +0,0 @@
|
|||
PYTHON RELEASE NOTES FOR THE MACINTOSH
|
||||
|
||||
VERSION 1.1
|
||||
|
||||
For the most part, Python on the Mac works just like Python under UNIX.
|
||||
The most important differences are:
|
||||
|
||||
- Since there is no shell environment on the Mac, the start-up file
|
||||
has a fixed name: PythonStartup. If a file by this name exists
|
||||
(either in the current folder or in the system folder) it is executed
|
||||
when an interactive interpreter is started.
|
||||
|
||||
- The default search path for modules is different: first the current
|
||||
directory is searched, then the subdirectories 'lib', 'lib:stdwin' and
|
||||
'demo'. As always, you can change this (e.g. in your PythonStartup
|
||||
file) by assigning or appending to sys.path -- use Macintosh pathnames!
|
||||
(The default contains no absolute paths because these are unlikely
|
||||
to make sense on other people's hard disks.)
|
||||
|
||||
- The user interface for typing interactive commands is different.
|
||||
This is actually the THINK C console I/O module, which is based on
|
||||
the Mac toolbox TextEdit. A standard Edit menu provides Cut, Copy,
|
||||
Paste and Clear (Undo is only there for Desk Accessories). A minimal
|
||||
File menu provides Quit, which immediately exits the application,
|
||||
without the usual cleanup. You can Copy from previous output,
|
||||
but you can't scroll back beyond the 24x80 screen. The TAB key
|
||||
always brings you to the end of the current input line; indentation
|
||||
must be entered with spaces (a single space is enough).
|
||||
End-of-file is generated by Command-D; Command-Period interrupts.
|
||||
There is an annoying limit in the length of an input line to a single
|
||||
screen line (less the prompt). Use \ to input long statements.
|
||||
Change your program if it requires long lines typed on input.
|
||||
Even though there is no resize box, the window can be resized by
|
||||
dragging its bottom right corner, but the maximum size is 24x80.
|
||||
|
||||
- Tabs in module files are interpreted as 4 (four!) spaces. This is
|
||||
consistent with most Mac editors that I know. For individual files
|
||||
you can change the tab size with a comment like
|
||||
|
||||
# vi:set tabsize=8:
|
||||
|
||||
(exactly as shown here, including the colons!). If you are consistent
|
||||
in always using tabs for indentation on UNIX, your files will be
|
||||
parsed correctly on the Mac, although they may look funny if you
|
||||
have nicely lined-up comments or tables using tabs. Never using tabs
|
||||
also works. Mixing tabs and spaces to simulate 4-character indentation
|
||||
levels is likely to fail.
|
||||
|
||||
- You can start a script from the Finder by selecting the script and
|
||||
the Python interpreter together and then double clicking. If you
|
||||
make the owner of the script PYTH (the type should always be TEXT)
|
||||
Python will be launched if you double click it!
|
||||
There is no way to pass command line arguments to Python scripts.
|
||||
|
||||
- The set of built-in modules is different:
|
||||
|
||||
= Operating system functions for the 'os' module is provided by the
|
||||
built-in module 'mac', not 'posix'. This doesn't have all the
|
||||
functions from posix, for obvious reasons (if you know the Mac
|
||||
O/S a little bit). The functions in os.path are provided by
|
||||
macpath, they know about Mac pathnames etc.
|
||||
|
||||
= None of the UNIX specific modules ('socket', 'pwd', 'grp' etc.)
|
||||
exists.
|
||||
|
||||
= Module 'stdwin' is always available. It uses the Mac version of
|
||||
STDWIN, which interfaces directly with the Mac toolbox. The most
|
||||
important difference is in the font names; setfont() has a second
|
||||
argument specifying the point size and an optional third one
|
||||
specifying the variation: a single letter character string,
|
||||
'i' for italics, 'b' for bold. Note that when STDWIN is waiting
|
||||
for events, the standard File and Edit menus are inactive but
|
||||
still visible, and (most annoyingly) the Apple menu is also inactive;
|
||||
conversely, menus put up by STDWIN are not active when the Python is
|
||||
reading from the keyboard. If you open Python together with a text
|
||||
file containing a Python script, the script will be executed and
|
||||
a console window is only generated when the script uses standard
|
||||
input or output. A script that uses STDWIN exclusively for its I/O
|
||||
will have a working Apple menu and no extraneous File/Edit menus.
|
||||
(This is because both stdwin and stdio try to initialize the
|
||||
windowing environment; whoever gets there first owns the Apple menu.)
|
||||
LIMITATIONS: a few recent additions to STDWIN for X11 have not yet
|
||||
been added to the Mac version. There are no bitmap objects, and
|
||||
the setwinpos() and setwinsize() methods are non--functional.
|
||||
|
||||
- Because launching an application on the Mac is so tedious, you will
|
||||
want to edit your program with a desk accessory editor (e.g., Sigma
|
||||
edit) and test the changed version without leaving Python. This is
|
||||
possible but requires some care. Make sure the program is a module
|
||||
file (filename must be a Python identifier followed by '.py'). You
|
||||
can then import it when you test it for the first time. There are
|
||||
now three possibilities: it contains a syntax error; it gets a runtime
|
||||
error (unhandled exception); or it runs OK but gives wrong results.
|
||||
(If it gives correct results, you are done testing and don't need
|
||||
to read the rest of this paragraph. :-) Note that the following
|
||||
is not Mac-specific -- it's just that on UNIX it's easier to restart
|
||||
the entire script so it's rarely useful.
|
||||
|
||||
Recovery from a syntax error is easy: edit the file and import it
|
||||
again.
|
||||
|
||||
Recovery from wrong output is almost as easy: edit the file and,
|
||||
instead of importing it, call the function reload() with the module
|
||||
name as argument (e.g., if your module is called foo, type
|
||||
"reload(foo)").
|
||||
|
||||
Recovery from an exception is trickier. Once the syntax is correct,
|
||||
a 'module' entry is placed in an internal table, and following import
|
||||
statements will not re-read the file, even if the module's initialization
|
||||
terminated with an error (one reason why this is done is so that
|
||||
mutually recursive modules are initialized only once). You must
|
||||
therefore force re-reading the module with reload(), however, if this
|
||||
happens the first time you try to import the module, the import statement
|
||||
itself has not completed, and your workspace does not know the module
|
||||
name (even though the internal table of moduesl does!). The trick is
|
||||
to first import the module again, then reload it. For instance,
|
||||
"import foo; reload(foo)". Because the module object already exists
|
||||
internally, the import statement does not attempt to execute the
|
||||
module again -- it just places it in your workspace.
|
||||
|
||||
When you edit a module you don't have to worry about the corresponding
|
||||
'.pyc' file (a "compiled" version of the module, which loads much faster
|
||||
than the textual version): the interpreter notices that the '.py' file
|
||||
has changed (because its modification time has changed) and ignores the
|
||||
'.pyc' file. When parsing is successful, a new '.pyc' file is written;
|
||||
if this fails (no write permission, disk full or whatever) it is
|
||||
silently skipped but attempted again the next time the same module
|
||||
is loaded. (Thus, if you plan to place a Python library on a read-only
|
||||
disk, it is advisable to "warm the cache" by making the disk writable
|
||||
and importing all modules once. The standard module 'importall' helps
|
||||
in doing this.)
|
169
Mac/Relnotes-1.2
169
Mac/Relnotes-1.2
|
@ -1,169 +0,0 @@
|
|||
BUILDING PYTHON 1.2 FOR THE MACINTOSH
|
||||
*************************************
|
||||
|
||||
Python can be built on the Mac using either THINK C 6.0 (or 7.0), or
|
||||
CodeWarrior 5.0 (for 68K and PPC). In the past it has also been compiled
|
||||
with earlier versions of Think, but no guarantees are made that the
|
||||
source is still compatible with those versions. (Think C 5.0 appears
|
||||
to be OK.) Likewise, new compiler versions may effectively change the
|
||||
language accepted (or the library provided!) and thus cause problems.
|
||||
|
||||
MPW is a special case -- it used to be possible to build Python as
|
||||
an MPW tool using MPW 3.2, and this may still work, but I haven't
|
||||
tried this lately. What I have tried, however, is building Python
|
||||
as a shared library for CFM-68K, using the Symantec C compiler for MPW.
|
||||
See subdirectory MPW and the README file there for more info.
|
||||
|
||||
|
||||
1. Using Think C 6.0 (or 7.0)
|
||||
=============================
|
||||
|
||||
1.1 The directory structure
|
||||
---------------------------
|
||||
|
||||
I duplicate the UNIX directory structure from the distribution. The
|
||||
subdirectories needed to compile are: Mac, Include, Parser, Python,
|
||||
Objects, Modules. (Don't bother with Grammar and the parser
|
||||
generator, nor with the Doc subdirectory.)
|
||||
|
||||
For running and testing, you also need Lib and its subdirectories test
|
||||
and stdwin. You could also copy some things from the Demo/stdwin
|
||||
directory (unfortunately most other demos are UNIX specific and even
|
||||
many stdwin demos are).
|
||||
|
||||
Make sure there is no config.c file in the Modules subdirectory (if
|
||||
you copy from a directory where you have done a UNIX build this might
|
||||
occur). Also don't use the config.h generated on UNIX.
|
||||
|
||||
1.2 The project file
|
||||
--------------------
|
||||
|
||||
I put all source files in one project, which I place in the parent
|
||||
directory of the source directories.
|
||||
|
||||
1.2.1 Project type
|
||||
|
||||
(This is the Set Project Type... dialog in the Project menu.)
|
||||
|
||||
Set the creator to PYTH; turn on "far data"; leave "far code" and
|
||||
"separate strs" unchecked (they just serve to bloat the application).
|
||||
A partition size of 1000K should be enough to run the standard test
|
||||
suite (which requires a lot of memory because it stress tests the
|
||||
parser quite a bit) and most demos or medium-size applications. The
|
||||
interpreter will do basic things in as little at 500K but this may
|
||||
prevent parsing larger modules.
|
||||
|
||||
1.2.2 Compiler options
|
||||
|
||||
(This is the Options -> THINK C ... dialog in the Edit menu.)
|
||||
|
||||
- Start with Factory Settings.
|
||||
|
||||
- In the Prefix, remove #include <MacHeaders> and add
|
||||
#define HAVE_CONFIG_H
|
||||
|
||||
- Choose any optimizer and debugger settings you like. - You
|
||||
can choose 4-byte ints if you want. This requires that you
|
||||
rebuild the ANSI and unix libraries with 4-bytes ints as well
|
||||
(better make copies with names like ANSI 32 bit). With 4-byte
|
||||
ints the interpreter is marginally bigger and somewhat (~10%)
|
||||
slower, but Python programs can use strings and lists with
|
||||
more than 32000 items (with 2-byte ints these can cause
|
||||
crashes). The range of Python integers is not affected (these
|
||||
are always represented as longs). In fact, nowadays I always
|
||||
use 4-byte integers, since it is actually rather annoying that
|
||||
strings >= 64K cause crashes.
|
||||
|
||||
1.2.3 Files to add
|
||||
|
||||
(This is the Add Files... dialog in the Source menu.)
|
||||
|
||||
The following source files must be added to the project. I use a
|
||||
separate segment for each begin letter -- this avoids segment
|
||||
overflow, except for 'c', where you have to put either ceval.c or
|
||||
compile.c in a separate segment. You could also group them by
|
||||
subdirectory or function, but you may still have to split segments
|
||||
arbitrarily because of the 32000 bytes restriction.
|
||||
|
||||
- From Mac: all .c files.
|
||||
|
||||
- From Parser: acceler.c, grammar1.c,
|
||||
myreadline.c, node.c, parser.c, parsetok.c, tokenizer.c.
|
||||
|
||||
- From Python: bltinmodule.c, ceval.c, cgensupport.c,
|
||||
compile.c, errors.c, getargs.c getopt.c, graminit.c, import.c,
|
||||
importdl.c, marshal.c, modsupport.c, mystrtoul.c,
|
||||
pythonmain.c, pythonrun.c, sigcheck.c, structmember.c,
|
||||
sysmodule.c, traceback.c (i.e. all .c files except dup2.c,
|
||||
fmod.c, frozenmain.c, getcwd.c, getmtime.c, memmove.c,
|
||||
sigcheck.c, strerror.c, strtod.c, thread.c)
|
||||
|
||||
- From Objects: all .c files except xxobject.c.
|
||||
|
||||
- From Modules: all the modules listed in config.c (in the Mac
|
||||
subdirectory) in the initializer for inittab[], before
|
||||
"ADDMODULE MARKER 2". Also add md5c.c if you add md5module.c,
|
||||
and regexpr.c if you add regexmodule.c. (You'll find
|
||||
macmodule.c in the Mac subdirectory, so it should already have
|
||||
been added in a previous step.) Note that for most modules,
|
||||
the source file is called <name>module.c, but for a few long
|
||||
module names it is just <module>.c. Don't add stdwinmodule.c
|
||||
yet,
|
||||
|
||||
The following THINK C libraries must be added: from Standard
|
||||
Libraries, ANSI and unix; from Mac Libraries, MacTraps. I put each
|
||||
library in a separate segment. Also see my earlier remark on 4-byte
|
||||
ints.
|
||||
|
||||
1.4 Adding STDWIN
|
||||
-----------------
|
||||
|
||||
STDWIN is built in two separate projects: stdwin.pi contains the core
|
||||
STDWIN implementation from Ports/mac, textedit.pi contains the files
|
||||
from Packs/textedit. Use the same compiler options as for Python and
|
||||
the same general source setup (in a sister directory of the toplevel
|
||||
Python directory). Put all sources in the same segment. To
|
||||
stdwin.pi, also add Tools/strdup.c and Gen/wtextbreak.c.
|
||||
|
||||
The two projects can now be added as libraries to the Python project.
|
||||
You must also add stdwinmodule.c and add "#define USE_STDWIN" to the
|
||||
Prefix in the compiler options dialog (this only affects macmain.c and
|
||||
config.c).
|
||||
|
||||
Note that stdwinmodule.c contains an #include statement that
|
||||
references "stdwin.h" by relative path name -- if the stdwin toplevel
|
||||
directory is not a sibling of the python toplevel directory, you may
|
||||
have to adjust the number of colons in the pathname.
|
||||
|
||||
1.5 Resources
|
||||
-------------
|
||||
|
||||
Since I created them with ResEdit I have no text source of the
|
||||
resources needed to give the application an icon etc... You can copy
|
||||
the size, bundle, file reference and icon resources from the
|
||||
distributed Python application with ResEdit. THINK C automatically
|
||||
copies resources into the application file from a file
|
||||
<projectname>.rsrc.
|
||||
|
||||
1.6 Think C 5.0
|
||||
---------------
|
||||
|
||||
Tim Gilbert adds one note that will be helpful to future Think C 5.0
|
||||
users: When you have a really big project like python, and you want to
|
||||
compile and run it, if you just hit Command-R, often Think C will
|
||||
compile the remaining files, think for a moment, and then give you a
|
||||
warning "internal error(ZREF)--please remove objects." Don't listen
|
||||
to it. It is lying. What you should do instead is "Check Link..."
|
||||
and _then_ hit Run. Why? Ask Symantec.
|
||||
|
||||
|
||||
2. Using MicroWerks CodeWarrior 5.0
|
||||
===================================
|
||||
|
||||
Essentially, follow the instructions for Think C.
|
||||
|
||||
XXX Should at least list the project options.
|
||||
|
||||
|
||||
--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>
|
||||
<URL:http://www.cwi.nl/cwi/people/Guido.van.Rossum.html>
|
118
Mac/Relnotes-1.3
118
Mac/Relnotes-1.3
|
@ -1,118 +0,0 @@
|
|||
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
|
|
@ -1,125 +0,0 @@
|
|||
Changes between 1.3.3 and 1.3.2
|
||||
--------------------------------
|
||||
|
||||
A major change since 1.3.2 is in the organization of the files: The
|
||||
Mac folder has mac-specific demo programs, attempts at documentation and
|
||||
more. Browse the HTML files in Mac:Demo for more info.
|
||||
|
||||
Also, Toolbox:bgen is not needed anymore for normal use: the relevant
|
||||
python modules have been moved to Mac:Lib:toolbox.
|
||||
|
||||
Other changes:
|
||||
- Uses final Tk 4.1 and Tcl 7.5 distributions.
|
||||
- Override preferences (stored in the interpreter/applet application)
|
||||
allow overriding of system-wide preferences. Explained in
|
||||
"using.html".
|
||||
- New functionality in FrameWork.py:
|
||||
- ScrolledWindow class
|
||||
- enable(), settext(), setitem(), setmark(), seticon(),
|
||||
checkmenu() and delete() methods for menu entries.
|
||||
- event parameter added to idle() method
|
||||
- windowbounds() function helps programmer with staggering windows.
|
||||
- Erase only visRgn on an update event.
|
||||
- TextEdit interface module added
|
||||
- Waste interface module added
|
||||
- Demos for waste, including skeleton for html editor
|
||||
- Scrap manager interface added
|
||||
- Ctl.FindControl() could return reference to deleted object. Fixed.
|
||||
- GrafPorts have an _id attribute (address of grafport) allowing them
|
||||
to be compared (since a new python object is created each time).
|
||||
- Standard File folder no longer changed on chdir() (this was
|
||||
introduced in 1.3.2).
|
||||
- sys.argv can now be set if you option-drag or option-click a python
|
||||
source.
|
||||
- Various dialogs now have sensible defaults.
|
||||
- binhextree is now a bit more intelligent about when to binhex.
|
||||
- gensuitemodule fixed to hand '****' type arguments.
|
||||
|
||||
Changes between 1.3.2 and 1.3.1
|
||||
-------------------------------
|
||||
|
||||
The main reason for the 1.3.2 distribution is the availability of Tk
|
||||
for the mac. The Tk port and its integration in Python is definitely
|
||||
not bug-free, hence this distribution should be treated as beta
|
||||
software at best.
|
||||
|
||||
Another major change in this release is that the Python I/O system is
|
||||
now based on the GUSI library. This is an I/O library that attempts to
|
||||
mimic a Posix I/O system. Hence, modules like socket and select are
|
||||
now available in MacPython. If you build dynamically loaded modules
|
||||
and you use any unix-like feature such as stat() calls you should
|
||||
compile using the GUSI include files.
|
||||
|
||||
A third major change is that the MacOS creator code has been changed
|
||||
from 'PYTH' to 'Pyth', due to a conflict. This means that you will
|
||||
have to change the creator of all your old python programs. The
|
||||
distribution contains a script "FixCreator.py" that does this
|
||||
recursively for a whole folder.
|
||||
|
||||
Here are all the changes since 1.3.1, in no particular order:
|
||||
- complex number support added
|
||||
- cmath module added
|
||||
- startup options ("option-drag" dialog) can be retrieved from the
|
||||
preferences file. EditPythonPrefs hasn't been updated yet, though.
|
||||
- Creator changed from PYTH to Pyth
|
||||
- {mac,os}.unlink is now also called {mac,os}.remove
|
||||
- {mac,os}.mkdir second arg optional
|
||||
- dup and fdopen calls added
|
||||
- select module added
|
||||
- socket module added
|
||||
- open(file, '*r') for opening resource forks has been removed. It is
|
||||
replaced by MacOS.openrf(file, 'r'), which returns a simple
|
||||
file-like object to read (or write) resource forks.
|
||||
- Added AppleEvent URL suite
|
||||
- Added AppleEvent netscape suite
|
||||
- QuickDraw globals are now all accessible, as Qd.qd.xxxx
|
||||
|
||||
|
||||
Mac-specific changes between 1.3 and 1.3.1
|
||||
--------------------------------------
|
||||
|
||||
Aside from the changes mentioned here there have also been some
|
||||
changes in the core python, but these are not documented here.
|
||||
However, these changes are mainly bugfixes, so there shouldn't be any
|
||||
incompatabilities.
|
||||
|
||||
- imgsgi and imgpbm modules added
|
||||
- Various hooks installed to allow integration with MacTk (currently
|
||||
disabled)
|
||||
- Added support for MacOS Fixed type in toolbox arguments (represented
|
||||
as floats in python)
|
||||
- Added option to keep output window open on normal termination
|
||||
- Decreased minimum heapsize to run interpreter
|
||||
- Added progress-bar to EasyDialogs
|
||||
- Fixed socket.getportname()
|
||||
- Renamed MACTCP.py to MACTCPconst.py
|
||||
|
||||
- Many fixes to FrameWork.py:
|
||||
- Added window.SetPort() method
|
||||
- Added optional bounds and resid parameters to Window.open()
|
||||
- Fixed apple-menu DA handling
|
||||
- Fixed activate-event handling
|
||||
- Added default Application.makeusermenus() (File:Quit only)
|
||||
- Fixed bug with keyboard input handling
|
||||
- added idle() method, called from event loop if there are no events
|
||||
pending
|
||||
|
||||
Toolbox modules:
|
||||
- component manager module added
|
||||
- quicktime module added
|
||||
- font manager module added
|
||||
- Added color window support
|
||||
- Added support to obtain pixmap from a window
|
||||
- Added BitMap type
|
||||
- Added GrafPort type
|
||||
- Added support for PenState, Patterns, FontInfo, RGB colors,
|
||||
- Fixed GetPen and SetPt arguments
|
||||
- Added read access to members of {C}GrafPort objects
|
||||
- Added support for cursors
|
||||
- Provide access to some QuickDraw globals
|
||||
- Fixed InsetRect, OffsetRect, MapRect
|
||||
- Added support for various handles such as PatHandle, CursHandle
|
||||
- Added functions to access members of Window objects
|
||||
|
||||
|
||||
|
|
@ -1,171 +0,0 @@
|
|||
Changes between 1.4b3 and 1.3.3
|
||||
-------------------------------
|
||||
|
||||
Aside from all the changes Guido made to the machine-independent part
|
||||
of Python the following mac-specific changes have been made:
|
||||
|
||||
- The standard 68K Python is built for CFM68K. This means that PPC and
|
||||
68K Python are now largely compatible, both supporting dynamically
|
||||
loaded modules, python applets, etc.
|
||||
As a result of this there have been numerous subtle changes in
|
||||
filenames for PPC plugin modules and such, but these changes should
|
||||
be transparent to Python programs.
|
||||
The one missing module in cfm68k is Macspeech, for which no CFM68K
|
||||
interface library is available (yet?).
|
||||
- Raise MemoryError on stack overflow.
|
||||
- Python now always uses 8-byte doubles.
|
||||
- Removed mactcp, macdnr and stdwin modules from standard
|
||||
distribution.
|
||||
- New releases of Tcl/Tk (4.1p1), CWGUSI (1.7.2) and Waste (1.2f) have
|
||||
been incorporated.
|
||||
- Macfs.SetFolder method added, which sets initial folder for standard
|
||||
file dialogs.
|
||||
- New py_resource module to handle PYC resources.
|
||||
- List mgr objects "selFlags" and "listFlags" members now accessible.
|
||||
- QuickDraw got a few new symbolic constants.
|
||||
- Qt and Cm modules now live in a separate dynamically loadable
|
||||
module, so other toolbox modules work if you don't have QuickTime
|
||||
installed.
|
||||
- Old sound mgr calls {Set,Get}SoundVol removed, version number
|
||||
interface changed.
|
||||
- Added convenience routines setarrowcursor and setwatchcursor to
|
||||
FrameWork.
|
||||
- Bugfixes to time.sleep(), FrameWork, macostools,
|
||||
- Minor fixes/additions/updates to demos and documentation in the Demo
|
||||
folder.
|
||||
- Internal changes:
|
||||
- Ported to CW9
|
||||
- mwerks_????_config.h organization rationalized
|
||||
- Projects renamed to reflect architecture (ppc, cfm68k, 68k).
|
||||
- various defines (HAVE_CONFIG_H, USE_MAC_DYNAMIC_LOADING) no longer
|
||||
needed.
|
||||
- shared-library architecture made more conforming to metrowerks
|
||||
documentation. Check xx plugin projects if you have built your own
|
||||
dynamically loaded modules.
|
||||
|
||||
|
||||
Changes between 1.3.3 and 1.3.2
|
||||
--------------------------------
|
||||
|
||||
A major change since 1.3.2 is in the organization of the files: The
|
||||
Mac folder has mac-specific demo programs, attempts at documentation and
|
||||
more. Browse the HTML files in Mac:Demo for more info.
|
||||
|
||||
Also, Toolbox:bgen is not needed anymore for normal use: the relevant
|
||||
python modules have been moved to Mac:Lib:toolbox.
|
||||
|
||||
Other changes:
|
||||
- Uses final Tk 4.1 and Tcl 7.5 distributions.
|
||||
- Override preferences (stored in the interpreter/applet application)
|
||||
allow overriding of system-wide preferences. Explained in
|
||||
"using.html".
|
||||
- New functionality in FrameWork.py:
|
||||
- ScrolledWindow class
|
||||
- enable(), settext(), setitem(), setmark(), seticon(),
|
||||
checkmenu() and delete() methods for menu entries.
|
||||
- event parameter added to idle() method
|
||||
- windowbounds() function helps programmer with staggering windows.
|
||||
- Erase only visRgn on an update event.
|
||||
- TextEdit interface module added
|
||||
- Waste interface module added
|
||||
- Demos for waste, including skeleton for html editor
|
||||
- Scrap manager interface added
|
||||
- Ctl.FindControl() could return reference to deleted object. Fixed.
|
||||
- GrafPorts have an _id attribute (address of grafport) allowing them
|
||||
to be compared (since a new python object is created each time).
|
||||
- Standard File folder no longer changed on chdir() (this was
|
||||
introduced in 1.3.2).
|
||||
- sys.argv can now be set if you option-drag or option-click a python
|
||||
source.
|
||||
- Various dialogs now have sensible defaults.
|
||||
- binhextree is now a bit more intelligent about when to binhex.
|
||||
- gensuitemodule fixed to hand '****' type arguments.
|
||||
|
||||
Changes between 1.3.2 and 1.3.1
|
||||
-------------------------------
|
||||
|
||||
The main reason for the 1.3.2 distribution is the availability of Tk
|
||||
for the mac. The Tk port and its integration in Python is definitely
|
||||
not bug-free, hence this distribution should be treated as beta
|
||||
software at best.
|
||||
|
||||
Another major change in this release is that the Python I/O system is
|
||||
now based on the GUSI library. This is an I/O library that attempts to
|
||||
mimic a Posix I/O system. Hence, modules like socket and select are
|
||||
now available in MacPython. If you build dynamically loaded modules
|
||||
and you use any unix-like feature such as stat() calls you should
|
||||
compile using the GUSI include files.
|
||||
|
||||
A third major change is that the MacOS creator code has been changed
|
||||
from 'PYTH' to 'Pyth', due to a conflict. This means that you will
|
||||
have to change the creator of all your old python programs. The
|
||||
distribution contains a script "FixCreator.py" that does this
|
||||
recursively for a whole folder.
|
||||
|
||||
Here are all the changes since 1.3.1, in no particular order:
|
||||
- complex number support added
|
||||
- cmath module added
|
||||
- startup options ("option-drag" dialog) can be retrieved from the
|
||||
preferences file. EditPythonPrefs hasn't been updated yet, though.
|
||||
- Creator changed from PYTH to Pyth
|
||||
- {mac,os}.unlink is now also called {mac,os}.remove
|
||||
- {mac,os}.mkdir second arg optional
|
||||
- dup and fdopen calls added
|
||||
- select module added
|
||||
- socket module added
|
||||
- open(file, '*r') for opening resource forks has been removed. It is
|
||||
replaced by MacOS.openrf(file, 'r'), which returns a simple
|
||||
file-like object to read (or write) resource forks.
|
||||
- Added AppleEvent URL suite
|
||||
- Added AppleEvent netscape suite
|
||||
- QuickDraw globals are now all accessible, as Qd.qd.xxxx
|
||||
|
||||
|
||||
Mac-specific changes between 1.3 and 1.3.1
|
||||
--------------------------------------
|
||||
|
||||
Aside from the changes mentioned here there have also been some
|
||||
changes in the core python, but these are not documented here.
|
||||
However, these changes are mainly bugfixes, so there shouldn't be any
|
||||
incompatabilities.
|
||||
|
||||
- imgsgi and imgpbm modules added
|
||||
- Various hooks installed to allow integration with MacTk (currently
|
||||
disabled)
|
||||
- Added support for MacOS Fixed type in toolbox arguments (represented
|
||||
as floats in python)
|
||||
- Added option to keep output window open on normal termination
|
||||
- Decreased minimum heapsize to run interpreter
|
||||
- Added progress-bar to EasyDialogs
|
||||
- Fixed socket.getportname()
|
||||
- Renamed MACTCP.py to MACTCPconst.py
|
||||
|
||||
- Many fixes to FrameWork.py:
|
||||
- Added window.SetPort() method
|
||||
- Added optional bounds and resid parameters to Window.open()
|
||||
- Fixed apple-menu DA handling
|
||||
- Fixed activate-event handling
|
||||
- Added default Application.makeusermenus() (File:Quit only)
|
||||
- Fixed bug with keyboard input handling
|
||||
- added idle() method, called from event loop if there are no events
|
||||
pending
|
||||
|
||||
Toolbox modules:
|
||||
- component manager module added
|
||||
- quicktime module added
|
||||
- font manager module added
|
||||
- Added color window support
|
||||
- Added support to obtain pixmap from a window
|
||||
- Added BitMap type
|
||||
- Added GrafPort type
|
||||
- Added support for PenState, Patterns, FontInfo, RGB colors,
|
||||
- Fixed GetPen and SetPt arguments
|
||||
- Added read access to members of {C}GrafPort objects
|
||||
- Added support for cursors
|
||||
- Provide access to some QuickDraw globals
|
||||
- Fixed InsetRect, OffsetRect, MapRect
|
||||
- Added support for various handles such as PatHandle, CursHandle
|
||||
- Added functions to access members of Window objects
|
||||
|
||||
|
||||
|
|
@ -12,13 +12,9 @@ preferences to make it extract C sources with creator CWIE
|
|||
and .py files as text files with creator Pyth, this will save
|
||||
you work later.
|
||||
|
||||
You will also need CodeWarrior 8. If you have another development
|
||||
You will also need CodeWarrior 11. If you have another development
|
||||
environment you are on your own, basically.
|
||||
|
||||
You may also need the img distribution and the stdwin distribution.
|
||||
If you don't want them you may have to edit some of the projects
|
||||
to remove references to them.
|
||||
|
||||
When you've extracted everything you may have to unpack the
|
||||
.hqx files in Mac:Resources and Mac:mwerks:Projects (but suntar
|
||||
may have done this for you already).
|
||||
|
@ -26,6 +22,7 @@ may have done this for you already).
|
|||
You have to remove Modules:fmmodule.c, the SGI fm module, which has a
|
||||
name conflict with the Mac Fmmodule.c.
|
||||
|
||||
|
||||
Next, create your build directories. I use the following naming
|
||||
convention:
|
||||
build.macppc.shared PowerPC shared-library
|
||||
|
@ -39,47 +36,8 @@ Move MWCPythonCoreRuntime.
|
|||
PythonApplet.µ (from the Mac:mwerks:projects folder) to
|
||||
build.macppc.shared, move Python68K.µ to build.mac68k.stand.
|
||||
|
||||
Build the projects. For the PPC projects, keep the order given above.
|
||||
Do *not* run the python interpreter yet. First, move the interpreter
|
||||
to the main python folder. For PPC, also move PythonCore to the main
|
||||
python folder.
|
||||
Now, your folder structure more-or-less resembles that of what comes
|
||||
with the mac source distribution. Read the file Mac:Demo:building.html
|
||||
for further instructions.
|
||||
|
||||
Now try your python interpreter, this will create an initial
|
||||
preferences file.
|
||||
|
||||
For 68K python you are now done.
|
||||
|
||||
For PPC Python, don't try complicated scripts yet, you first have to
|
||||
create the dynamically loadable modules. Create a folder PlugIns (in
|
||||
the toplevel python folder) and move all the projects that have
|
||||
"module" or "modules" in their name there. Build these projects. This
|
||||
will create a number of ".exp" files, edit these files to contain only
|
||||
all the "init" modules, and build the projects again. This latter step
|
||||
isn't really essential, so feel free to skip it.
|
||||
|
||||
The next step is to create aliases for the various modules that "live
|
||||
together" in one shared library. For this, take MkPluginAliases.py and
|
||||
MkPluginAliases.rsrc from the Mac:scripts folder and move or copy them
|
||||
to the python home folder. Run the script from there.
|
||||
|
||||
If you haven't created all plugins you'll get some errors about files
|
||||
not existing, don't worry. Don't forget to move the scripts back.
|
||||
|
||||
Next, make an alias of PythonCore (also named PythonCore) and put it
|
||||
in System Folder:Extensions. This will ensure that you can run python
|
||||
anywhere, not just from the folder where PythonCore lives.
|
||||
|
||||
Most of your environment is now setup. You can try it by running
|
||||
EditPythonPrefs.py (in Mac:scripts), it should now work from there.
|
||||
|
||||
Lastly, you should setup some stuff needed for applet creation. First,
|
||||
you should put PythonApplet (or an alias to it) in the python home
|
||||
folder. Next, you should turn mkapplet.py (from mac:scripts) into an
|
||||
applet itself: double-click it and give it itself as input in the
|
||||
input file dialog.
|
||||
|
||||
Now that you have created mkapplet you can use this as a droplet:
|
||||
drag-and-drop python sources onto it (EditPythonPrefs.py and
|
||||
RunLibScript.py come to mind) and the applets will be created.
|
||||
|
||||
Jack Jansen, CWI, 18 March 1996.
|
||||
Jack Jansen, CWI, 28 May 1997.
|
||||
|
|
Loading…
Reference in New Issue