| Jack Jansen | 7701fd9 | 1997-05-28 12:01:14 +0000 | [diff] [blame] | 1 | This file contains the release notes of older MacPython versions. | 
 | 2 |  | 
 | 3 | 	Changes between 1.4 and 1.3.3 | 
 | 4 | 	------------------------------- | 
 | 5 |  | 
 | 6 | Aside from all the changes Guido made to the machine-independent part | 
 | 7 | of Python (see NEWS for those)the following mac-specific changes have | 
 | 8 | been made: | 
 | 9 |  | 
 | 10 | - Preference file and other items in the System folder now have the | 
 | 11 |   version number in their name, so old and new python installations | 
 | 12 |   can coexist. | 
 | 13 | - Fixed a GUSI crash when exiting with files open. | 
 | 14 | - Fixed interference with some extensions that added resources that | 
 | 15 |   looked like ours. | 
 | 16 | - Fixed slowness of Python in the background. | 
 | 17 | - About box added (at last...). | 
 | 18 | - New release of CWGUSI (1.8.0) incorporated. Note that for Tcl/Tk the | 
 | 19 |   4.1p1 release is still used (4.2 was a little too late). Everything | 
 | 20 |   ported to CW10. | 
 | 21 | - Applets can now turn off argc/argv processing (so they can do their | 
 | 22 |   own initial AppleEvent handling). Applets can also delay opening the | 
 | 23 |   console window until it is actually used (and, hence, not open it at | 
 | 24 |   all by refraining from using it). | 
 | 25 | - MiniAEFrame: Preliminary AppleScript server support. Example code | 
 | 26 |   provided, including an initial stab at writing CGI scripts in Python. | 
 | 27 | - macfs: FindApplication() locates application given 4-char creator | 
 | 28 |   code. | 
 | 29 | - macfs: GetDates and SetDates get and set creation date, etc. | 
 | 30 | - FrameWork: preferred method of ending mainloop() is calling _quit(). | 
 | 31 | - FrameWork: different menubar handling resulting in less flashing | 
 | 32 |   during menu creation. | 
 | 33 | - FrameWork: added setarrowcursor and setwatchcursor functions. | 
 | 34 | - findertools: new module that makes various finder features | 
 | 35 |   available. | 
 | 36 | - macostools: copy file times too. | 
 | 37 | - macostools: added touch() to tell finder about changes to a file. | 
 | 38 | - macerrors: New module with symbolic names for all os-releated | 
 | 39 |   errors. | 
 | 40 | - EasyDialogs: ProgressBar fixed. | 
 | 41 | - aetools: start application if needed | 
 | 42 | - aetools: use aetools.error for server-generated errors, MacOS.error | 
 | 43 |   for communication errors, etc. | 
 | 44 | - Finder_7_0_Suite: New module with the "simple" finder scripting | 
 | 45 |   interface. | 
 | 46 | - mac (aka os): xstat() returns resourcesize, creator, type in | 
 | 47 |   addition to stat() information. | 
 | 48 | - MacOS: added DebugStr method to drop to low-level debugger. | 
 | 49 | - MacOS: fixed splash() to actually draw the splash box:-) | 
 | 50 | - Ctl: fixed very nasty bug in DisposeControl and object deletion. | 
 | 51 | - Dlg: Added GetDialogWindow and other accessor functions | 
 | 52 | - Waste: fixed bug with object hanlder installation | 
 | 53 | - Waste: added tab support | 
 | 54 | - time: added strftime | 
 | 55 | - twit: a windowing debugger for Python (preliminary release) | 
 | 56 | - BBPy: a BBEdit extension that send scripts to the Python interpreter, | 
 | 57 |   by Just van Rossum. | 
 | 58 |  | 
 | 59 | The following set of changes were already in place for the 1.4b3 | 
 | 60 | release: | 
 | 61 | - The standard 68K Python is built for CFM68K. This means that PPC and | 
 | 62 |   68K Python are now largely compatible, both supporting dynamically | 
 | 63 |   loaded modules, python applets, etc. | 
 | 64 |   As a result of this there have been numerous subtle changes in | 
 | 65 |   filenames for PPC plugin modules and such, but these changes should | 
 | 66 |   be transparent to Python programs. | 
 | 67 |   The one missing module in cfm68k is Macspeech, for which no CFM68K | 
 | 68 |   interface library is available (yet?). | 
 | 69 | - Raise MemoryError on stack overflow. | 
 | 70 | - Python now always uses 8-byte doubles. | 
 | 71 | - Removed mactcp, macdnr and stdwin modules from standard | 
 | 72 |   distribution. | 
 | 73 | - New releases of Tcl/Tk (4.1p1), CWGUSI (1.7.2) and Waste (1.2f) have | 
 | 74 |   been incorporated. | 
 | 75 | - Macfs.SetFolder method added, which sets initial folder for standard | 
 | 76 |   file dialogs. | 
 | 77 | - New py_resource module to handle PYC resources. | 
 | 78 | - List mgr objects "selFlags" and "listFlags" members now accessible. | 
 | 79 | - QuickDraw got a few new symbolic constants. | 
 | 80 | - Qt and Cm modules now live in a separate dynamically loadable | 
 | 81 |   module, so other toolbox modules work if you don't have QuickTime | 
 | 82 |   installed. | 
 | 83 | - Old sound mgr calls {Set,Get}SoundVol removed, version number | 
 | 84 |   interface changed. | 
 | 85 | - Added convenience routines setarrowcursor and setwatchcursor to | 
 | 86 |   FrameWork. | 
 | 87 | - Bugfixes to time.sleep(), FrameWork, macostools, | 
 | 88 | - Minor fixes/additions/updates to demos and documentation in the Demo | 
 | 89 |   folder. | 
 | 90 | - Internal changes: | 
 | 91 |   - Ported to CW9 | 
 | 92 |   - mwerks_????_config.h organization rationalized | 
 | 93 |   - Projects renamed to reflect architecture (ppc, cfm68k, 68k). | 
 | 94 |   - various defines (HAVE_CONFIG_H, USE_MAC_DYNAMIC_LOADING) no longer | 
 | 95 |     needed. | 
 | 96 |   - shared-library architecture made more conforming to metrowerks | 
 | 97 |     documentation. Check xx plugin projects if you have built your own | 
 | 98 |     dynamically loaded modules. | 
 | 99 |    | 
 | 100 | 	 | 
 | 101 | 	Changes between 1.3.3 and 1.3.2 | 
 | 102 | 	-------------------------------- | 
 | 103 |  | 
 | 104 | A major change since 1.3.2 is in the organization of the files: The | 
 | 105 | Mac folder has mac-specific demo programs, attempts at documentation and | 
 | 106 | more. Browse the HTML files in Mac:Demo for more info. | 
 | 107 |  | 
 | 108 | Also, Toolbox:bgen is not needed anymore for normal use: the relevant | 
 | 109 | python modules have been moved to Mac:Lib:toolbox. | 
 | 110 |  | 
 | 111 | Other changes: | 
 | 112 | - Uses final Tk 4.1 and Tcl 7.5 distributions. | 
 | 113 | - Override preferences (stored in the interpreter/applet application) | 
 | 114 |   allow overriding of system-wide preferences. Explained in | 
 | 115 |   "using.html". | 
 | 116 | - New functionality in FrameWork.py: | 
 | 117 |   - ScrolledWindow class | 
 | 118 |   - enable(), settext(), setitem(), setmark(), seticon(), | 
 | 119 |     checkmenu() and delete() methods for menu entries. | 
 | 120 |   - event parameter added to idle() method | 
 | 121 |   - windowbounds() function helps programmer with staggering windows. | 
 | 122 |   - Erase only visRgn on an update event. | 
 | 123 | - TextEdit interface module added | 
 | 124 | - Waste interface module added | 
 | 125 | - Demos for waste, including skeleton for html editor | 
 | 126 | - Scrap manager interface added | 
 | 127 | - Ctl.FindControl() could return reference to deleted object. Fixed. | 
 | 128 | - GrafPorts have an _id attribute (address of grafport) allowing them | 
 | 129 |   to be compared (since a new python object is created each time). | 
 | 130 | - Standard File folder no longer changed on chdir() (this was | 
 | 131 |   introduced in 1.3.2). | 
 | 132 | - sys.argv can now be set if you option-drag or option-click a python | 
 | 133 |   source. | 
 | 134 | - Various dialogs now have sensible defaults. | 
 | 135 | - binhextree is now a bit more intelligent about when to binhex. | 
 | 136 | - gensuitemodule fixed to hand '****' type arguments. | 
 | 137 |  | 
 | 138 | 	Changes between 1.3.2 and 1.3.1 | 
 | 139 | 	------------------------------- | 
 | 140 |  | 
 | 141 | The main reason for the 1.3.2 distribution is the availability of Tk | 
 | 142 | for the mac. The Tk port and its integration in Python is definitely | 
 | 143 | not bug-free, hence this distribution should be treated as beta | 
 | 144 | software at best. | 
 | 145 |  | 
 | 146 | Another major change in this release is that the Python I/O system is | 
 | 147 | now based on the GUSI library. This is an I/O library that attempts to | 
 | 148 | mimic a Posix I/O system. Hence, modules like socket and select are | 
 | 149 | now available in MacPython. If you build dynamically loaded modules | 
 | 150 | and you use any unix-like feature such as stat() calls you should | 
 | 151 | compile using the GUSI include files. | 
 | 152 |  | 
 | 153 | A third major change is that the MacOS creator code has been changed | 
 | 154 | from 'PYTH' to 'Pyth', due to a conflict. This means that you will | 
 | 155 | have to change the creator of all your old python programs. The | 
 | 156 | distribution contains a script "FixCreator.py" that does this | 
 | 157 | recursively for a whole folder. | 
 | 158 |  | 
 | 159 | Here are all the changes since 1.3.1, in no particular order: | 
 | 160 | - complex number support added | 
 | 161 | - cmath module added | 
 | 162 | - startup options ("option-drag" dialog) can be retrieved from the | 
 | 163 |   preferences file. EditPythonPrefs hasn't been updated yet, though. | 
 | 164 | - Creator changed from PYTH to Pyth | 
 | 165 | - {mac,os}.unlink is now also called {mac,os}.remove | 
 | 166 | - {mac,os}.mkdir second arg optional | 
 | 167 | - dup and fdopen calls added | 
 | 168 | - select module added | 
 | 169 | - socket module added | 
 | 170 | - open(file, '*r') for opening resource forks has been removed. It is | 
 | 171 |   replaced by MacOS.openrf(file, 'r'), which returns a simple | 
 | 172 |   file-like object to read (or write) resource forks. | 
 | 173 | - Added AppleEvent URL suite | 
 | 174 | - Added AppleEvent netscape suite | 
 | 175 | - QuickDraw globals are now all accessible, as Qd.qd.xxxx | 
 | 176 |  | 
 | 177 |  | 
 | 178 | 	Mac-specific changes between 1.3 and 1.3.1 | 
 | 179 | 	-------------------------------------- | 
 | 180 |  | 
 | 181 | Aside from the changes mentioned here there have also been some | 
 | 182 | changes in the core python, but these are not documented here. | 
 | 183 | However, these changes are mainly bugfixes, so there shouldn't be any | 
 | 184 | incompatabilities. | 
 | 185 |  | 
 | 186 | - imgsgi and imgpbm modules added | 
 | 187 | - Various hooks installed to allow integration with MacTk (currently | 
 | 188 |   disabled) | 
 | 189 | - Added support for MacOS Fixed type in toolbox arguments (represented | 
 | 190 |   as floats in python) | 
 | 191 | - Added option to keep output window open on normal termination | 
 | 192 | - Decreased minimum heapsize to run interpreter | 
 | 193 | - Added progress-bar to EasyDialogs | 
 | 194 | - Fixed socket.getportname() | 
 | 195 | - Renamed MACTCP.py to MACTCPconst.py | 
 | 196 |  | 
 | 197 | - Many fixes to FrameWork.py: | 
 | 198 |   - Added window.SetPort() method | 
 | 199 |   - Added optional bounds and resid parameters to Window.open() | 
 | 200 |   - Fixed apple-menu DA handling | 
 | 201 |   - Fixed activate-event handling | 
 | 202 |   - Added default Application.makeusermenus() (File:Quit only) | 
 | 203 |   - Fixed bug with keyboard input handling | 
 | 204 |   - added idle() method, called from event loop if there are no events | 
 | 205 |     pending | 
 | 206 |  | 
 | 207 | Toolbox modules: | 
 | 208 | - component manager module added | 
 | 209 | - quicktime module added | 
 | 210 | - font manager module added | 
 | 211 | - Added color window support | 
 | 212 | - Added support to obtain pixmap from a window | 
 | 213 | - Added BitMap type | 
 | 214 | - Added GrafPort type | 
 | 215 | - Added support for PenState, Patterns, FontInfo, RGB colors, | 
 | 216 | - Fixed GetPen and SetPt arguments | 
 | 217 | - Added read access to members of {C}GrafPort objects | 
 | 218 | - Added support for cursors | 
 | 219 | - Provide access to some QuickDraw globals | 
 | 220 | - Fixed InsetRect, OffsetRect, MapRect | 
 | 221 | - Added support for various handles such as PatHandle, CursHandle | 
 | 222 | - Added functions to access members of Window objects | 
 | 223 |  | 
 | 224 |  | 
 | 225 |  | 
 | 226 | 	Changes since 1.3beta3 | 
 | 227 | 	---------------------- | 
 | 228 | - MkPluginAliases.py now works in a virgin distribution environment. It is | 
 | 229 |   also distributed as an applet. | 
 | 230 | - hexbin from binhex.py has been fixed | 
 | 231 | - various bits and pieces in readme files clarified | 
 | 232 | - mkapplet bug wrt owner resource (and, hence, trouble starting applets) fixed. | 
 | 233 | - Compiled with CodeWarrior 7. | 
 | 234 | - AE client modules generated with gensuitemodule.py now use keyword args. | 
 | 235 | - img modules updated to latest version (including pbm and sgi support). | 
 | 236 | - Everything compiled with all optimization options available. Let me know | 
 | 237 |   if you suspect errors that are due to this. | 
 | 238 |  | 
 | 239 | 	Changes since Python 1.2 for the mac | 
 | 240 | 	------------------------------------ | 
 | 241 | - PPC python now uses a shared library organization. This allows the | 
 | 242 |   creation of dynamically loadable extension modules (contact me) and | 
 | 243 |   creation of python applets (see mkapplet.py). A number of previously | 
 | 244 |   builtin modules are now dynamically loaded. Dynamically loaded | 
 | 245 |   modules are distributed in the PlugIns folder. | 
 | 246 | - Python modules can live in 'PYC ' resources (with a name equal to the | 
 | 247 |   module name, so many modules can live in a single file). If you put a | 
 | 248 |   file (in stead of a folder) in sys.path its resources will be searched. | 
 | 249 |   See the PackLibDir script for creating such a file. | 
 | 250 | - new binhex module (partially working, hexbin has problems) | 
 | 251 | - Python now has a Preferences file, editable with | 
 | 252 |   EditPythonPrefs. Remembered are the python 'home folder' and the | 
 | 253 |   initial value for sys.path. If no preferences file is found a simple | 
 | 254 |   one is created. | 
 | 255 |   NOTE: this only works correctly if you start python the first time | 
 | 256 |   from the correct folder. | 
 | 257 | - new img modules, to read/write/convert images in various formats | 
 | 258 | - new MacOS toolbox modules: AE, Ctl, Dlg, Event, List, Qd, Res, Snd | 
 | 259 |   and Win. These provide access to various of the MacOS toolbox | 
 | 260 |   interfaces. No documentation yet, but the __doc__ strings provide at | 
 | 261 |   least the calling sequence (and Inside Mac will give you the | 
 | 262 |   semantics). Minimal demos are provided for most toolbox interfaces, | 
 | 263 |   and the 'scripts' directory has some more examples. | 
 | 264 | - AppleEvent client interfaces can be generated from aete/aeut | 
 | 265 |   resources. No support for objects yet, nor for server interfaces. | 
 | 266 | - Lib:mac:FrameWork.py has an application framework (under | 
 | 267 |   construction).  | 
 | 268 | - (PPC Only) support for building Python applets: tiny standalone | 
 | 269 |   python applications. | 
 | 270 | - fp = open(filename, '*r') opens resource-fork of a file for reading | 
 | 271 |   (and similar for writing). | 
 | 272 | - option-dragging a file to the interpreter (or immedeately pressing | 
 | 273 |   <option> after launching python) will bring up an Options dialog | 
 | 274 |   allowing you to set options like import-tracing, etc. | 
 | 275 | - MacOS module method added: GetErrorString(OSErr) -> error string | 
 | 276 | - There is now a numbering convention for resource-ID's: | 
 | 277 |   128-255	Resources used by the interpreter itself | 
 | 278 |   256-511	Resources used by standard modules | 
 | 279 |   512-		Resources for applications | 
 | 280 | - macfs module changes: | 
 | 281 |   - StandardGetFile without type arguments now shows all files | 
 | 282 |   - PromptGetFile(prompt, ...) is like StandardGetFile but with a | 
 | 283 |     prompt | 
 | 284 |   - GetDirectory (let user select a folder) added | 
 | 285 |   - GetFInfo and SetFInfo methods of FSSpec objects get/set finder | 
 | 286 |     info. FInfo objects have attributes Creator, Type, etc. | 
 | 287 |   - FindFolder (locate trash/preferences/etc) added | 
 | 288 | - mactcp/macdnr changes: bug fix wrt idle-loop. | 
 | 289 | - EditPythonPrefs script: change initial sys.path and python home | 
 | 290 |   folder | 
 | 291 | - (PPC only) MkPluginAliases: Setup aliases for dynamically loadable | 
 | 292 |   modules that live in a single shared library | 
 | 293 | - PackLibDir: Convert Lib directory to a single resource file | 
 | 294 |   containing all .pyc code | 
 | 295 | - fixfiletypes: Set file types based on file extension over a whole | 
 | 296 |   tree. | 
 | 297 | - RunLibScript: Run any script as main program, optionally redirecting | 
 | 298 |   stdin/stdout, supplying arguments, etc. | 
 | 299 | - binhextree: Binhex all files in a tree, depending on the extension. | 
 | 300 | - (PPC only) mkapplet: Create a python applet from a sourcefile and | 
 | 301 |   (optional) resourcefile. | 
 | 302 |    | 
 | 303 | 	PYTHON 1.2 FOR THE MACINTOSH | 
 | 304 | 	**************************** | 
 | 305 |  | 
 | 306 | Python can be built on the Mac using either THINK C 6.0 (or 7.0), or | 
 | 307 | CodeWarrior 5.0 (for 68K and PPC).  In the past it has also been compiled | 
 | 308 | with earlier versions of Think, but no guarantees are made that the | 
 | 309 | source is still compatible with those versions.  (Think C 5.0 appears | 
 | 310 | to be OK.)  Likewise, new compiler versions may effectively change the | 
 | 311 | language accepted (or the library provided!)  and thus cause problems. | 
 | 312 |  | 
 | 313 | MPW is a special case -- it used to be possible to build Python as | 
 | 314 | an MPW tool using MPW 3.2, and this may still work, but I haven't | 
 | 315 | tried this lately.  What I have tried, however, is building Python | 
 | 316 | as a shared library for CFM-68K, using the Symantec C compiler for MPW. | 
 | 317 | See subdirectory MPW and the README file there for more info. | 
 | 318 |  | 
 | 319 |  | 
 | 320 | 1. Using Think C 6.0 (or 7.0) | 
 | 321 | ============================= | 
 | 322 |  | 
 | 323 | 1.1 The directory structure | 
 | 324 | --------------------------- | 
 | 325 |  | 
 | 326 | I duplicate the UNIX directory structure from the distribution.  The | 
 | 327 | subdirectories needed to compile are: Mac, Include, Parser, Python, | 
 | 328 | Objects, Modules.  (Don't bother with Grammar and the parser | 
 | 329 | generator, nor with the Doc subdirectory.) | 
 | 330 |  | 
 | 331 | For running and testing, you also need Lib and its subdirectories test | 
 | 332 | and stdwin.  You could also copy some things from the Demo/stdwin | 
 | 333 | directory (unfortunately most other demos are UNIX specific and even | 
 | 334 | many stdwin demos are). | 
 | 335 |  | 
 | 336 | Make sure there is no config.c file in the Modules subdirectory (if | 
 | 337 | you copy from a directory where you have done a UNIX build this might | 
 | 338 | occur).  Also don't use the config.h generated on UNIX. | 
 | 339 |  | 
 | 340 | 1.2 The project file | 
 | 341 | -------------------- | 
 | 342 |  | 
 | 343 | I put all source files in one project, which I place in the parent | 
 | 344 | directory of the source directories. | 
 | 345 |  | 
 | 346 | 1.2.1 Project type | 
 | 347 |  | 
 | 348 | (This is the Set Project Type... dialog in the Project menu.) | 
 | 349 |  | 
 | 350 | Set the creator to PYTH; turn on "far data"; leave "far code" and | 
 | 351 | "separate strs" unchecked (they just serve to bloat the application). | 
 | 352 | A partition size of 1000K should be enough to run the standard test | 
 | 353 | suite (which requires a lot of memory because it stress tests the | 
 | 354 | parser quite a bit) and most demos or medium-size applications.  The | 
 | 355 | interpreter will do basic things in as little at 500K but this may | 
 | 356 | prevent parsing larger modules. | 
 | 357 |  | 
 | 358 | 1.2.2 Compiler options | 
 | 359 |  | 
 | 360 | (This is the Options -> THINK C ... dialog in the Edit menu.) | 
 | 361 |  | 
 | 362 | 	- Start with Factory Settings. | 
 | 363 |  | 
 | 364 | 	- In the Prefix, remove #include <MacHeaders> and add | 
 | 365 | 		#define HAVE_CONFIG_H | 
 | 366 |  | 
 | 367 | 	- Choose any optimizer and debugger settings you like.  - You | 
 | 368 | 	can choose 4-byte ints if you want.  This requires that you | 
 | 369 | 	rebuild the ANSI and unix libraries with 4-bytes ints as well | 
 | 370 | 	(better make copies with names like ANSI 32 bit).  With 4-byte | 
 | 371 | 	ints the interpreter is marginally bigger and somewhat (~10%) | 
 | 372 | 	slower, but Python programs can use strings and lists with | 
 | 373 | 	more than 32000 items (with 2-byte ints these can cause | 
 | 374 | 	crashes).  The range of Python integers is not affected (these | 
 | 375 | 	are always represented as longs).  In fact, nowadays I always | 
 | 376 | 	use 4-byte integers, since it is actually rather annoying that | 
 | 377 | 	strings >= 64K cause crashes. | 
 | 378 |  | 
 | 379 | 1.2.3 Files to add | 
 | 380 |  | 
 | 381 | (This is the Add Files... dialog in the Source menu.) | 
 | 382 |  | 
 | 383 | The following source files must be added to the project.  I use a | 
 | 384 | separate segment for each begin letter -- this avoids segment | 
 | 385 | overflow, except for 'c', where you have to put either ceval.c or | 
 | 386 | compile.c in a separate segment.  You could also group them by | 
 | 387 | subdirectory or function, but you may still have to split segments | 
 | 388 | arbitrarily because of the 32000 bytes restriction. | 
 | 389 |  | 
 | 390 | 	- From Mac: all .c files. | 
 | 391 |  | 
 | 392 | 	- From Parser: acceler.c, grammar1.c, | 
 | 393 | 	myreadline.c, node.c, parser.c, parsetok.c, tokenizer.c. | 
 | 394 |  | 
 | 395 | 	- From Python: bltinmodule.c, ceval.c, cgensupport.c, | 
 | 396 | 	compile.c, errors.c, getargs.c getopt.c, graminit.c, import.c, | 
 | 397 | 	importdl.c, marshal.c, modsupport.c, mystrtoul.c, | 
 | 398 | 	pythonmain.c, pythonrun.c, sigcheck.c, structmember.c, | 
 | 399 | 	sysmodule.c, traceback.c (i.e. all .c files except dup2.c, | 
 | 400 | 	fmod.c, frozenmain.c, getcwd.c, getmtime.c, memmove.c, | 
 | 401 | 	sigcheck.c, strerror.c, strtod.c, thread.c) | 
 | 402 |  | 
 | 403 | 	- From Objects: all .c files except xxobject.c. | 
 | 404 |  | 
 | 405 | 	- From Modules: all the modules listed in config.c (in the Mac | 
 | 406 | 	subdirectory) in the initializer for inittab[], before | 
 | 407 | 	"ADDMODULE MARKER 2".  Also add md5c.c if you add md5module.c, | 
 | 408 | 	and regexpr.c if you add regexmodule.c.  (You'll find | 
 | 409 | 	macmodule.c in the Mac subdirectory, so it should already have | 
 | 410 | 	been added in a previous step.)  Note that for most modules, | 
 | 411 | 	the source file is called <name>module.c, but for a few long | 
 | 412 | 	module names it is just <module>.c.  Don't add stdwinmodule.c | 
 | 413 | 	yet, | 
 | 414 |  | 
 | 415 | The following THINK C libraries must be added: from Standard | 
 | 416 | Libraries, ANSI and unix; from Mac Libraries, MacTraps.  I put each | 
 | 417 | library in a separate segment.  Also see my earlier remark on 4-byte | 
 | 418 | ints. | 
 | 419 |  | 
 | 420 | 1.4 Adding STDWIN | 
 | 421 | ----------------- | 
 | 422 |  | 
 | 423 | STDWIN is built in two separate projects: stdwin.pi contains the core | 
 | 424 | STDWIN implementation from Ports/mac, textedit.pi contains the files | 
 | 425 | from Packs/textedit.  Use the same compiler options as for Python and | 
 | 426 | the same general source setup (in a sister directory of the toplevel | 
 | 427 | Python directory).  Put all sources in the same segment.  To | 
 | 428 | stdwin.pi, also add Tools/strdup.c and Gen/wtextbreak.c. | 
 | 429 |  | 
 | 430 | The two projects can now be added as libraries to the Python project. | 
 | 431 | You must also add stdwinmodule.c and add "#define USE_STDWIN" to the | 
 | 432 | Prefix in the compiler options dialog (this only affects macmain.c and | 
 | 433 | config.c). | 
 | 434 |  | 
 | 435 | Note that stdwinmodule.c contains an #include statement that | 
 | 436 | references "stdwin.h" by relative path name -- if the stdwin toplevel | 
 | 437 | directory is not a sibling of the python toplevel directory, you may | 
 | 438 | have to adjust the number of colons in the pathname. | 
 | 439 |  | 
 | 440 | 1.5 Resources | 
 | 441 | ------------- | 
 | 442 |  | 
 | 443 | Since I created them with ResEdit I have no text source of the | 
 | 444 | resources needed to give the application an icon etc...  You can copy | 
 | 445 | the size, bundle, file reference and icon resources from the | 
 | 446 | distributed Python application with ResEdit.  THINK C automatically | 
 | 447 | copies resources into the application file from a file | 
 | 448 | <projectname>.rsrc. | 
 | 449 |  | 
 | 450 | 1.6 Think C 5.0 | 
 | 451 | --------------- | 
 | 452 |  | 
 | 453 | Tim Gilbert adds one note that will be helpful to future Think C 5.0 | 
 | 454 | users: When you have a really big project like python, and you want to | 
 | 455 | compile and run it, if you just hit Command-R, often Think C will | 
 | 456 | compile the remaining files, think for a moment, and then give you a | 
 | 457 | warning "internal error(ZREF)--please remove objects."  Don't listen | 
 | 458 | to it.  It is lying.  What you should do instead is "Check Link..." | 
 | 459 | and _then_ hit Run.  Why?  Ask Symantec. | 
 | 460 |  | 
 | 461 |  | 
 | 462 | 2. Using MicroWerks CodeWarrior 5.0 | 
 | 463 | =================================== | 
 | 464 |  | 
 | 465 | Essentially, follow the instructions for Think C. | 
 | 466 |  | 
 | 467 | XXX Should at least list the project options. | 
 | 468 |  | 
 | 469 |  | 
 | 470 | --Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl> | 
 | 471 | <URL:http://www.cwi.nl/cwi/people/Guido.van.Rossum.html> | 
 | 472 |  | 
 | 473 | 	PYTHON RELEASE NOTES FOR THE MACINTOSH | 
 | 474 | 	VERSION 1.1 | 
 | 475 |  | 
 | 476 | For the most part, Python on the Mac works just like Python under UNIX. | 
 | 477 | The most important differences are: | 
 | 478 |  | 
 | 479 | - Since there is no shell environment on the Mac, the start-up file | 
 | 480 |   has a fixed name: PythonStartup.  If a file by this name exists | 
 | 481 |   (either in the current folder or in the system folder) it is executed | 
 | 482 |   when an interactive interpreter is started. | 
 | 483 |  | 
 | 484 | - The default search path for modules is different: first the current | 
 | 485 |   directory is searched, then the subdirectories 'lib', 'lib:stdwin' and | 
 | 486 |   'demo'.  As always, you can change this (e.g. in your PythonStartup | 
 | 487 |   file) by assigning or appending to sys.path -- use Macintosh pathnames! | 
 | 488 |   (The default contains no absolute paths because these are unlikely | 
 | 489 |   to make sense on other people's hard disks.) | 
 | 490 |  | 
 | 491 | - The user interface for typing interactive commands is different. | 
 | 492 |   This is actually the THINK C console I/O module, which is based on | 
 | 493 |   the Mac toolbox TextEdit.  A standard Edit menu provides Cut, Copy, | 
 | 494 |   Paste and Clear (Undo is only there for Desk Accessories).  A minimal | 
 | 495 |   File menu provides Quit, which immediately exits the application, | 
 | 496 |   without the usual cleanup.  You can Copy from previous output, | 
 | 497 |   but you can't scroll back beyond the 24x80 screen.  The TAB key | 
 | 498 |   always brings you to the end of the current input line; indentation | 
 | 499 |   must be entered with spaces (a single space is enough). | 
 | 500 |   End-of-file is generated by Command-D; Command-Period interrupts. | 
 | 501 |   There is an annoying limit in the length of an input line to a single | 
 | 502 |   screen line (less the prompt).  Use \ to input long statements. | 
 | 503 |   Change your program if it requires long lines typed on input. | 
 | 504 |   Even though there is no resize box, the window can be resized by | 
 | 505 |   dragging its bottom right corner, but the maximum size is 24x80. | 
 | 506 |  | 
 | 507 | - Tabs in module files are interpreted as 4 (four!) spaces.  This is | 
 | 508 |   consistent with most Mac editors that I know.  For individual files | 
 | 509 |   you can change the tab size with a comment like | 
 | 510 |  | 
 | 511 | 	# vi:set tabsize=8: | 
 | 512 |  | 
 | 513 |   (exactly as shown here, including the colons!).  If you are consistent | 
 | 514 |   in always using tabs for indentation on UNIX, your files will be | 
 | 515 |   parsed correctly on the Mac, although they may look funny if you | 
 | 516 |   have nicely lined-up comments or tables using tabs.  Never using tabs | 
 | 517 |   also works.  Mixing tabs and spaces to simulate 4-character indentation | 
 | 518 |   levels is likely to fail. | 
 | 519 |  | 
 | 520 | - You can start a script from the Finder by selecting the script and | 
 | 521 |   the Python interpreter together and then double clicking.  If you | 
 | 522 |   make the owner of the script PYTH (the type should always be TEXT) | 
 | 523 |   Python will be launched if you double click it! | 
 | 524 |   There is no way to pass command line arguments to Python scripts. | 
 | 525 |  | 
 | 526 | - The set of built-in modules is different: | 
 | 527 |  | 
 | 528 |   = Operating system functions for the 'os' module is provided by the | 
 | 529 |     built-in module 'mac', not 'posix'.  This doesn't have all the | 
 | 530 |     functions from posix, for obvious reasons (if you know the Mac | 
 | 531 |     O/S a little bit).  The functions in os.path are provided by | 
 | 532 |     macpath, they know about Mac pathnames etc. | 
 | 533 |      | 
 | 534 |   = None of the UNIX specific modules ('socket', 'pwd', 'grp' etc.) | 
 | 535 |     exists. | 
 | 536 |      | 
 | 537 |   = Module 'stdwin' is always available.  It uses the Mac version of | 
 | 538 |     STDWIN, which interfaces directly with the Mac toolbox.  The most | 
 | 539 |     important difference is in the font names; setfont() has a second | 
 | 540 |     argument specifying the point size and an optional third one | 
 | 541 |     specifying the variation: a single letter character string, | 
 | 542 |     'i' for italics, 'b' for bold.  Note that when STDWIN is waiting | 
 | 543 |     for events, the standard File and Edit menus are inactive but | 
 | 544 |     still visible, and (most annoyingly) the Apple menu is also inactive; | 
 | 545 |     conversely, menus put up by STDWIN are not active when the Python is | 
 | 546 |     reading from the keyboard.  If you open Python together with a text | 
 | 547 |     file containing a Python script, the script will be executed and | 
 | 548 |     a console window is only generated when the script uses standard | 
 | 549 |     input or output.  A script that uses STDWIN exclusively for its I/O | 
 | 550 |     will have a working Apple menu and no extraneous File/Edit menus. | 
 | 551 |     (This is because both stdwin and stdio try to initialize the | 
 | 552 |     windowing environment; whoever gets there first owns the Apple menu.) | 
 | 553 |     LIMITATIONS: a few recent additions to STDWIN for X11 have not yet | 
 | 554 |     been added to the Mac version.  There are no bitmap objects, and | 
 | 555 |     the setwinpos() and setwinsize() methods are non--functional. | 
 | 556 |  | 
 | 557 | - Because launching an application on the Mac is so tedious, you will | 
 | 558 |   want to edit your program with a desk accessory editor (e.g., Sigma | 
 | 559 |   edit) and test the changed version without leaving Python.  This is | 
 | 560 |   possible but requires some care.  Make sure the program is a module | 
 | 561 |   file (filename must be a Python identifier followed by '.py').  You | 
 | 562 |   can then import it when you test it for the first time.  There are | 
 | 563 |   now three possibilities: it contains a syntax error; it gets a runtime | 
 | 564 |   error (unhandled exception); or it runs OK but gives wrong results. | 
 | 565 |   (If it gives correct results, you are done testing and don't need | 
 | 566 |   to read the rest of this paragraph. :-)  Note that the following | 
 | 567 |   is not Mac-specific -- it's just that on UNIX it's easier to restart | 
 | 568 |   the entire script so it's rarely useful. | 
 | 569 |    | 
 | 570 |   Recovery from a syntax error is easy: edit the file and import it | 
 | 571 |   again. | 
 | 572 |    | 
 | 573 |   Recovery from wrong output is almost as easy: edit the file and, | 
 | 574 |   instead of importing it, call the function reload() with the module | 
 | 575 |   name as argument (e.g., if your module is called foo, type | 
 | 576 |   "reload(foo)"). | 
 | 577 |    | 
 | 578 |   Recovery from an exception is trickier.  Once the syntax is correct, | 
 | 579 |   a 'module' entry is placed in an internal table, and following import | 
 | 580 |   statements will not re-read the file, even if the module's initialization | 
 | 581 |   terminated with an error (one reason why this is done is so that | 
 | 582 |   mutually recursive modules are initialized only once).  You must | 
 | 583 |   therefore force re-reading the module with reload(), however, if this | 
 | 584 |   happens the first time you try to import the module, the import statement | 
 | 585 |   itself has not completed, and your workspace does not know the module | 
 | 586 |   name (even though the internal table of moduesl does!).  The trick is | 
 | 587 |   to first import the module again, then reload it.  For instance, | 
 | 588 |   "import foo; reload(foo)".  Because the module object already exists | 
 | 589 |   internally, the import statement does not attempt to execute the | 
 | 590 |   module again -- it just places it in your workspace. | 
 | 591 |    | 
 | 592 |   When you edit a module you don't have to worry about the corresponding | 
 | 593 |   '.pyc' file (a "compiled" version of the module, which loads much faster | 
 | 594 |   than the textual version): the interpreter notices that the '.py' file | 
 | 595 |   has changed (because its modification time has changed) and ignores the | 
 | 596 |   '.pyc' file.  When parsing is successful, a new '.pyc' file is written; | 
 | 597 |   if this fails (no write permission, disk full or whatever) it is | 
 | 598 |   silently skipped but attempted again the next time the same module | 
 | 599 |   is loaded.  (Thus, if you plan to place a Python library on a read-only | 
 | 600 |   disk, it is advisable to "warm the cache" by making the disk writable | 
 | 601 |   and importing all modules once.  The standard module 'importall' helps | 
 | 602 |   in doing this.) |