summaryrefslogtreecommitdiffstats
path: root/Mac/MPW/README
diff options
context:
space:
mode:
Diffstat (limited to 'Mac/MPW/README')
-rw-r--r--Mac/MPW/README122
1 files changed, 0 insertions, 122 deletions
diff --git a/Mac/MPW/README b/Mac/MPW/README
deleted file mode 100644
index 3d58230..0000000
--- a/Mac/MPW/README
+++ /dev/null
@@ -1,122 +0,0 @@
-Python and MPW
-==============
-
-There is conditional code in Python for MPW. This has been used with
-different compilers at various points in time. Right now it is being
-used to turn the entire interpreter into a shared library on 68K Macs,
-so we can build "applets" (see below). I have used MPW 3.2 and the OpenDoc
-development environment from an OpenDoc CD released in 1984. This
-contains the Symantec C compiler for MPW (version 7.0.4), the
-Universal Headers (version 2.0a1), and early versions of CFM-68K (version 1.0a1)
-(the Code Fragment Manager ported back to the 68K Mac) and
-MixedModeInit (version 1.0d12), which are required to use shared libraries.
-
-I've created a Makefile that does everything, plus a three-line Build
-script that calls Make and runs its output. The Makefile assumes that
-it lives in a 1-deep subdirectory of the root, so e.g. the Python
-Include directory can be referenced through "::Include". All object
-files are collected in the subsubdirectory Objcode.
-
-I use these feature test macros:
-
-MPW for all MPW compilers (e.g. long double in <math.h>)
-__SC__ for things specific to the Symantec C compiler
- (e.g. doesn't like static forward)
-__CFM68K__ for things specific to CFM-68K
- (e.g. it requires the use of #pragma lib_export on|off)
-HAVE_UNIVERSAL_HEADERS for things not yet in Think's headers (e.g. UPPs)
-GENERATINGCFM for both PPC and 68K Code Fragment Manager
-
-MPW is defined in config.h (if it finds that applec is defined);
-HAVE_UNIVERSAL_HEADERS is defined in macglue.h depending on whether it
-thinks we are using Universal Headers. The others are defined by the
-compiler or by the system headers.
-
-Compiler switches were a nightmare until I found I had to use -b.
-This wasn't mentioned in the CFM-68K docs that came on the OpenDoc
-CD-ROM. Apparently it is only needed for large projects...
-
-
-Warning: Mixing Think C and MPW
-===============================
-
-(XXX Need to check what convention SC uses -- I hope it uses Think's.)
-
-If you are mixing Think C and MPW, you may experience weird errors in
-previously correct modules. These disappear when you throw away the
-module's .pyc file. The errors usually have to do with string
-literals containing '\n' or '\r'. The reason is an incompatibility
-between their handling of '\n' and '\r' -- in MPW C, '\n' actually is
-ASCII CR while '\r' is ASCII LF, which is the reverse situation from
-any other ASCII based C implementation. This behaviour is inherited
-by Python compiled with MPW C. This is normally not a problem, but
-*binary* files written by one system will be mis-interpreted by the
-other, and this is what happens to the .pyc files. There is no easy
-way to fix this in the source. (This is a real shame, since the
-format of .pyc files was carefully designed to be independent of byte
-order and integer size -- deviations in the ASCII character codes were
-never anticipated.)
-
-
-Building "Applets" for the Mac
-==============================
-
-An "applet" is a tiny application that's written in a scripting language
-but behaves like a real application. The behavior is much like that of
-executable scripts in Unix -- but the implementation is entirely different.
-
-The applet's file can be small because it doesn't contain the actual
-interpreter for the scripting language -- this has to be installed in the
-Extensions folder (usually) before the applet will work. The applet file
-itself only contains a tiny bootstrap program and the script itself --
-possibly "compiled" or otherwise encoded to save on parsing time and space,
-and to make it harder to reverse engineer the script (some people care about
-this).
-
-In Python's case, the Python interpreter, without its main program, is built
-as a shared library that is dropped in the Extensions folder. Some more
-shared libraries must also be present -- these form the C run-time system.
-[[XXX perhaps we should link these in statically with the Python library,
-for simpler distribution???]] On the 68K Mac, two more extensions are needed:
-CFM-68K (the Code Fragment Manager) and MixedModeInit. These provide
-functionality that's built in the Power Mac's OS. It seems that System 7.1.1
-or higher is also required.
-
-The applet file contains a small main program program, plus a 'PYC ' resource
-named __main__ which contains the "compiled" version of the script. A 'PYC '
-resource contains exactly the same data as a ".pyc" file. (The advantage of
-storing compiled modules as resources instead of files is that many modules
-can be stored in a single file.) The applet's main
-program initializes most of the toolbox managers (it uses the same sequence
-as stdwin or the Think C console I/O library), then initializes Python,
-then loads the resource and decodes it into a Python code object, and finally
-passes the code object to the Python interpreter for execution. [[XXX Actually,
-the applet's main program could be moved entirely to the shared library --
-there's nothing in it that's dependent on the applet's configuration.
-The applet itself could then be reduced to main() { applet_main(); } ]]
-[[XXX I tried this but it only save 512 bytes on a total of 10K -- the rest
-is boilerplate that the linker always seems to create. Wonder how this is on
-the Power Mac...]]
-
-A big restriction for applets is that they have no standard input and their
-standard output and error streams are diverted to files called "stdout" and
-"stderr". This means that in order to interact with the user, or even just
-to provide some feedback while they're grinding along, they must make use of
-Mac toolbox calls to create windows, etc. I plan to provide a library that at
-least has the output functionality of the Think C Console I/O library or
-CodeWarrior's SIOX.
-
-The current procedure to create an applet is not as simple as it could be.
-I have written a Python script (which itself can be -- and has been -- made
-into an applet!) which asks for a Python source file (input) and an existing
-applet file (output). It adds a 'PYC ' resource to the applet named __main__,
-which contains the compiled code of the script (it compiles on the fly,
-so you don't need to have a .pyc file for the script).
-Although this seems fairly simple, the practical complication is that you need
-to copy the applet template first -- if you specify the template as the output,
-you will overwrite the template! [[XXX I guess a simplification could be made
-by using the convention that the applet built from a script has the same name
-as the script but with ".py" stripped; the applet-making script could then
-search for the template in a few common locations (e.g. the Python module
-search path) and copy it, reducing the user interaction to just indicating the
-Python source file to be converted into an applet.]]