Ronald Oussoren avatar Ronald Oussoren committed d38db2e

Updates for the 1.0b1 release:
- Add announcment
- Move old news-items to the archive
- Upload 1.0b1 documentation
- Make sure there are no dead links in the examples
- Remove our only, and no longer relevant, FAQ :-(

Add note about CVS snapshots

Comments (0)

Files changed (29)

pyobjc-web/docroot/NEWS-0.9.txt

+# -*- indented-text -*-
+#
+# This file is part of the PyObjC package.
+#
+
+WHAT'S NEW:
+
+Version 0.9 (May-02-2003):
+- This version includes numerous bugfixes and improvements.
+
+- The module AppKit.NibClassBuilder has been moved to the package
+  PyObjCTools.
+
+- Usage of libFFI (http://sources.redhat.com/libffi) is now mandatory. The
+  setup.py gives the impression that it isn't, but we do *not* support 
+  non-FFI builds.
+
+- We actually have some documentation, more will be added in future releases.
+
+- There are more Project Builder templates (see 'Project Templates').
+
+- The InterfaceBuilder, PreferencePanes and ScreenSaver frameworks have been
+  wrapped.
+
+- Management of reference counts is now completely automatic, it is no longer
+  necessary to manually compensate for the higher reference count of objects 
+  returned by the alloc, copy and copyWithZone: class methods.
+
+- Various function and keyword arguments have been renamed for a better 
+  integration with Cocoa. A partial list is of the changed names is:
+  	objc.lookup_class -> objc.lookUpClass
+	objc.selector arguments/attributes:
+		is_initializer -> isInitializer
+		is_allocator -> isAlloc
+		donates_ref -> doesDonateReference
+		is_required -> isRequired
+		class_method -> isClassMethod
+		defining_class -> definingClass
+		returns_self -> returnsSelf
+		argument_types -> argumentTypes
+		return_type -> returnType
+	objc.get_class_list -> objc.getClassList
+
+- On Python 2.2, objc.YES and objc.NO are instances of a private boolean type,
+  on Python 2.3 these are instances of the builtin type bool.
+
+
+Version 0.8 (Dec-10-2002):
+
+- GNUStep support has been removed for lack of support.  Volunteers
+  needed.
+
+- Subclassing Objective-C classes from Python, including the addition
+  of instance variables (like 'IBOutlet's)
+
+- Generic support for pass-by-reference arguments
+
+- More complete Cocoa package, including wrappers for a number of 
+  C functions, enumerated types, and globals.
+
+- More example code
+
+- Objective-C mappings and sequences can be accessed using the normal
+  python methods for accessing mappings and sequences (e.g. subscripting
+  works as expected)
+
+- Documentation: See the directory 'docs'
+
+- Can build standalone Cocoa applications based entirely on Python
+  without requiring that user installs anything extra (requires 10.2).
+
+- Better packaging and wrapper construction tools (borrowed from
+  MacPython).
+
+- An installer package.
+
+- Support for Project Builder based Cocoa-Python projects.
+
+- Unit tests.
+
+Version 2002-01-30 (January 30, 2002):
+
+- Version bumped to 0.6.1 ( __version__ is now a PyString )
+
+- Will now build for Python 2.2
+
+- added Cocoa package with Foundation.py and AppKit.py wrappers.
+
+- HelloWorld.py in Examples
+
+- builds with -g flag for debugging. -v option will dump log
+  of message sends to /tmp file.
+
+- Fixed one major runtime bug: added ISCLASS test before isKindOfClass -
+  without check, it crashes on sends to abstract classes like NSProxy.
+
+- There are still problems with Delegates and Notifications. 
+
+Version 2001-03-17 (March 17, 2001):
+
+- moved to using distutils setup.py (requires small patch to distutils
+  that has been submitted against python 2.1b1)
+
+Version 2000-11-14 (November 14, 2000):
+
+- GNU_RUNTIME is likely completely broken
+
+- Compiles on Mac OS X Server (python 2.0)
+
+- Compiles on Mac OS X (python 2.0)
+
+- Works as either a dynamically loadable module or statically built
+  into a python executable
+
+- Requires a modified makesetup to work [patches have been sent to
+  SourceForge.net's Python project].
+
+- Supports NSAutoReleasepool.
+
+- Some pre-OSX stuff removed;  references to old APIs, etc... (but
+  nowhere near clean)
+
+Version 0.55, 18 August 1998:
+
+- Here again, supporting GNU_RUNTIME and GNUstep Base! On my new Linux
+  box I can finally test the module against them: I installed the
+  latest snapshot of gstep-core, that contains the base library
+  too. Given a sane GNUstep env (GNUSTEP_XXX env vars), you should be
+  able to build a static ObjC-ized interpreter by:
+    o Adjusting Setup, commenting out NeXT definition and enabling GNU
+      ones;
+    o make -f Makefile.pre.in boot
+    o make static
+
+Version 0.54, 24 March 1998:
+
+- OC_Pasteboard.[hm], OC_Stream.[mh] and ObjCStreams.m are definitively gone.
+- OC_PythonObject derives from NSProxy.
+
+Version 0.53, 4 January 1998:
+
+- Tons of changes, retargeting the core functionality around the
+  OpenSTEP API. This release basically matches the previous one
+  in terms of functionalities, but is should be closer to GNUstep.
+- OC_Streams and OC_Pasteboard aren't supported, I've not yet decided
+  if they are needed anymore.
+- Updated LittleButtonedWindow demo.
+
+Version 0.47, 29 October 1996:
+
+- Misc/Makefile.pre.in automatically sets TARGET to `pyobjc'.
+- ObjC.m splitted to ObjCObject.m ObjCMethod.m ObjCPointer.m
+  ObjCRuntime.m.
+- New (almost invisible) types: ObjCSequenceObject and
+  ObjCMappingObject; this to implement sequence and mapping syntax
+  (several mapping methods have stub implementation).
+- OC_Pasteboard class is gone. Its functionalities are now in a
+  category of Pasteboard/NSPasteboard.
+- Better methods doc.
+- PyArg_ParseTuple format strings contain arguments names.
+- OC_Streams are mapped to ObjCStreams by pythonify_c_value and its
+  counterpart.
+
+Version 0.46, 18 October 1996:
+
+- OC_Stream is now a subclass of NSData under Foundation.
+- New Objective-C class: OC_Pasteboard. Use it instead of Pasteboard/
+  NSPasteboard. 
+- New Objective-C class: OC_PythonBundle. Use it instead of NXBundle/NSBundle.
+  The ShellText demo has been upgraded to use it, and now you can run it
+  directly from the WorkSpace.
+- OC_Python.[hm] aren't in the package anymore.
+- Setup.in directives changed again, due to OC_Python.m dropping.
+
+Version 0.45, 14 October 1996:
+
+- Double syntax: to make it easier for us to test and choose the
+  better candidate, the only one that will be present in the final 1.0
+  release. Keeping both would result in a speed penality.
+- Revisited streams, in particular GNUstep support.
+
+Version 0.44, 9 October 1996:
+
+- Integers are now accepted too where floats or doubles are expected.
+- New method: ObjC.make_pointer (1) returns an ObjCPointer containing
+  ((void *) 1).
+
+Version 0.43, 7 October 1996:
+
+- Completed ObjCStream implementation. There is now a new module, ObjCStreams
+  which is automatically loaded by ObjC. You can access it as ObjC.streams.
+- Manual splitted in three parts: libPyObjC.tex with the chapter intro,
+  libObjC.tex describing the main module, libObjCStreams.tex explains the
+  stream facilities.
+
+Version 0.42, 4 October 1996:
+
+- You can pass initialization arguments when using the Class() syntax. You
+  select the right initializer selector with the `init' keyword parameter.
+- First cut on ObjCStream objects. Thanx to Bill Bumgarner for motivations.
+- New demo ShellText, to test above points.
+
+Version 0.41, 2 October 1996:
+
+- Revised error messages: for arguments type mismatch they show the ObjC type
+  expected.
+- When a method returns a pointer to something, it gets translated as an
+  ObjCPointer object, not the pythonified pointed value. When a method
+  expects a pointer argument, it accepts such an object as well.
+- New demo: Fred. To halt it, suspend the Python process with ^Z then kill
+  it ;-).
+- Setup.in directives changed. See the new file Modules/Setup.PyObjC.in
+- Distribuited as a standalone package. Special thanks to Bill Bumgarner.
+
+Version 0.4, 27 September 1996:
+
+- Now handles methods returning doubles or floats.
+- ObjCRuntime responds to .sel_is_mapped().
+
+Version 0.31, 26 September 1996:
+
+- It's now possible to use a different strategy to map ObjC method names to
+  Python ones. Sooner or later we should decide the one to go, and drop the
+  other. For details, see comments on PYTHONIFY_WITH_DOUBLE_UNDERSCORE in
+  objc_support.h.
+- Manual section.
+- ObjC.runtime.__dict__ added.
+- ObjC.runtime.kind added.
+
+Version 0.3, 20 September 1996:
+
+- No user visible changes, just a little effort towards GNU_RUNTIME support. 
+
+Version 0.2, 16 September 1996:
+
+- Accepts a struct.pack() string for pointer arguments, but...
+- ... New methods on ObjCMethod: .pack_argument and .unpack_argument:
+  these should be used whenever an ObjC method expects a passed-by-reference
+  argument; for example, on NeXTSTEP [View getFrame:] expects a pointer
+  to an NXRect structure, that it will fill with the current frame of the
+  view: in this case you should use something similar to
+        framep = aView.getFrame__.pack_argument (0)
+        aView.getFrame__ (framep)
+        frame = aView.getFrame__.unpack_argument (0, framep)
+
+Version 0.1, 13 September 1996:
+
+- Correctly handle pointer arguments.
+- New syntax to get a class: ObjC.runtime.NameOfClass
+- New syntax aliasing .new(): SomeClass()
+- New Demo: LittleButtonedWindow, that tests points above.
+- What follow is the recipe to get PyObjC dinamically loadable on NeXTSTEP:
+        * apply the patch in Misc/INSTALL.PyObjC to Python/importdl.c
+        * modify Python/Makefile adding the switch ``-ObjC'' to the importdl.o
+          build rule:
+          importdl.o:   importdl.c
+                $(CC) -ObjC -c $(CFLAGS) -I$(DLINCLDIR) $(srcdir)/importdl.c
+        * modify Modules/Setup moving the PyObjC entry suggested above AFTER
+          ``*shared*'', and remove ``-u libNeXT_s -lNeXT_s'' from it.
+        * run ``make'': this will update various files, in particular
+          Modules/Makefile.
+        * modify Modules/Makefile adding ``-u libNeXT_s -lNeXT_s'' to SYSLIBS:
+          SYSLIBS=      $(LIBM) $(LIBC) -u libNeXT_s -lNeXT_s
+        * run ``make'' again
+

pyobjc-web/docroot/NEWS-1.0b1.txt

+# -*- indented-text -*-
+#
+# This file is part of the PyObjC package.
+#
+
+WHAT'S NEW:
+
+Version 1.0b1 (2003-07-03 [preliminary date]):
+
+- More tutorials
+  Two new tutorials were added: 'Adding Python code to an existing ObjC 
+  application' and 'Understanding existing PyObjC examples'. The former
+  explains how you can use Python to add new functionality to an already
+  existing Objective-C application, the latter explains how to understand
+  PyObjC programs written by other people.
+
+- More examples
+  Three examples were added: DotView, ClassBrowser and PythonBrowser,
+  respectively showing the use of a custom NSView, NSBrowser and
+  NSOutlineView.  PythonBrowser is reusable, making it trivial to add an
+  object browser to your application.
+
+- Support for MacOS X 10.1
+  It is now possible to build PyObjC on MacOS X 10.1, with full access to 
+  the Cocoa API's on that platform.
+
+  Note: The port to MacOS X 10.1 is not as well supported as the 10.2 port.
+  The developers do not have full-time access to a MacOS X 10.1 system.
+
+- Support for the WebKit framework, included with Safari 1.0.
+  If you build PyObjC from source you will have to build on a system that has
+  the WebKit SDK installed to make use of this. Note that the additional 
+  functionality will only be usuable on systems that have Safari 1.0 installed,
+  however as long as you don't use the additional functionality it is safe
+  to run a 'WebKit-enabled' PyObjC on systems without Safari 1.0.
+
+- It is no longer necessary to specify which protocols are implemented by
+  a class, this information is automaticly deduced from the list of implemented
+  methods. You'll still a runtime error if you implement some methods of a 
+  protocol and one of the unimplemented methods is required.
+
+- Support for "toll-free bridging" of Carbon.CF types to Objective-C objects.
+  It is now possible to use instances of Carbon.CF types in places where 
+  Objective-C objects are expected. And to explicitly convert between the two.
+
+  Note: this requires Python 2.3.
+
+- Better integration with MacPython 2.3:
+
+  * NSMovie.initWithMovie_ and NSMovie.QTMovie now use QT.Movie objects instead
+    of generic pointer wrappers.
+
+  * NSWindow.initWithWindowRef_ and Window.windowRef now use Carbon.Window 
+    objects instead of generic pointer wrappers.
+
+  * Methods returning CoreFoundation objects will return MacPython objects,
+    and likewise, methods with CoreFoundation arguments will accept MacPython
+    objects.
+
+- It is now possible to write plugin bundles, such as preference panes for 
+  use in System Preferences, in Python. See Examples/PrefPanes for an example
+  of this feature.
+ 
+- The methods ``pyobjcPopPool`` and ``pyobjcPushPool`` of ``NSAutoreleasePool``
+  are deprecated. These were introduced when PyObjC did not yet support the
+  usual method for creating autorelease pools and are no longer necessary.
+
+- Improved unittests, greatly increasing the confidence in the correctness
+  of the bridge.
+
+- All suppport for non-FFI builds has been removed.
+
+- Object state is completely stored in the Objective-C object.  This has no
+  user-visible effects, but makes the implementation a lot easier to 
+  comprehend and maintain.
+
+- As part of the previous item we also fixed a bug that allowed addition of 
+  attributes to Objective-C objects. This was never the intention and had 
+  very odd semantics. Pure Objective-C objects not longer have a __dict__.
+
+- Weakrefs are no longer used in the implementation of the bridge. Because
+  the weakrefs to proxy objects isn't very useful the entire feature has 
+  been removed: It is no longer possible to create weakrefs to Objective-C
+  objects. 
+
+  NOTE: You could create weakrefs in previous versions, but those would
+  expire as soon as the last reference from Python died, *not* when the 
+  Objective-C object died, therefore code that uses weakrefs to Objective-C
+  objects is almost certainly incorrect.
+
+- Added support for custom conversion for pointer types. The end result is that
+  we support more Cocoa APIs without special mappings.
+
+- The generator scripts are automaticly called when building PyObjC. This
+  should make it easier to support multiple versions of MacOS X.
+
+
+Version 0.9 (May-02-2003):
+- This version includes numerous bugfixes and improvements.
+
+- The module AppKit.NibClassBuilder has been moved to the package
+  PyObjCTools.
+
+- Usage of libFFI (http://sources.redhat.com/libffi) is now mandatory. The
+  setup.py gives the impression that it isn't, but we do *not* support 
+  non-FFI builds.
+
+- We actually have some documentation, more will be added in future releases.
+
+- There are more Project Builder templates (see 'Project Templates').
+
+- The InterfaceBuilder, PreferencePanes and ScreenSaver frameworks have been
+  wrapped.
+
+- Management of reference counts is now completely automatic, it is no longer
+  necessary to manually compensate for the higher reference count of objects 
+  returned by the alloc, copy and copyWithZone: class methods.
+
+- Various function and keyword arguments have been renamed for a better 
+  integration with Cocoa. A partial list is of the changed names is:
+  	objc.lookup_class -> objc.lookUpClass
+	objc.selector arguments/attributes:
+		is_initializer -> isInitializer
+		is_allocator -> isAlloc
+		donates_ref -> doesDonateReference
+		is_required -> isRequired
+		class_method -> isClassMethod
+		defining_class -> definingClass
+		returns_self -> returnsSelf
+		argument_types -> argumentTypes
+		return_type -> returnType
+	objc.get_class_list -> objc.getClassList
+
+- On Python 2.2, objc.YES and objc.NO are instances of a private boolean type,
+  on Python 2.3 these are instances of the builtin type bool.
+
+- Because we now use libFFI a large amount of code could be disabled. The
+  binaries are therefore much smaller, while we can now forward messages with
+  arbitrary signatures (not limited to those we thought of while generating
+  the static proxies that were used in 0.8)
+
+- Better support for APIs that use byte arrays are arguments or return values. 
+  Specifically, the developer can now manipulate bitmaps directly via the 
+  NSBitmapImageRep class, work with binary data through the NSData class, and 
+  very quickly draw points and rects via NSRectFillList()
+
+- We added a subclass of unicode that is used to proxy NSString values. This
+  makes it easily possible to use NSString values with Python APIs, while at 
+  the same time allowing access to the full power of NSString.
+
+Version 0.8 (Dec-10-2002):
+
+- GNUStep support has been removed for lack of support.  Volunteers
+  needed.
+
+- Subclassing Objective-C classes from Python, including the addition
+  of instance variables (like 'IBOutlet's)
+
+- Generic support for pass-by-reference arguments
+
+- More complete Cocoa package, including wrappers for a number of 
+  C functions, enumerated types, and globals.
+
+- More example code
+
+- Objective-C mappings and sequences can be accessed using the normal
+  python methods for accessing mappings and sequences (e.g. subscripting
+  works as expected)
+
+- Documentation: See the directory 'docs'
+
+- Can build standalone Cocoa applications based entirely on Python
+  without requiring that user installs anything extra (requires 10.2).
+
+- Better packaging and wrapper construction tools (borrowed from
+  MacPython).
+
+- An installer package.
+
+- Support for Project Builder based Cocoa-Python projects.
+
+- Unit tests.
+
+Version 2002-01-30 (January 30, 2002):
+
+- Version bumped to 0.6.1 ( __version__ is now a PyString )
+
+- Will now build for Python 2.2
+
+- added Cocoa package with Foundation.py and AppKit.py wrappers.
+
+- HelloWorld.py in Examples
+
+- builds with -g flag for debugging. -v option will dump log
+  of message sends to /tmp file.
+
+- Fixed one major runtime bug: added ISCLASS test before isKindOfClass -
+  without check, it crashes on sends to abstract classes like NSProxy.
+
+- There are still problems with Delegates and Notifications. 
+
+Version 2001-03-17 (March 17, 2001):
+
+- moved to using distutils setup.py (requires small patch to distutils
+  that has been submitted against python 2.1b1)
+
+Version 2000-11-14 (November 14, 2000):
+
+- GNU_RUNTIME is likely completely broken
+
+- Compiles on Mac OS X Server (python 2.0)
+
+- Compiles on Mac OS X (python 2.0)
+
+- Works as either a dynamically loadable module or statically built
+  into a python executable
+
+- Requires a modified makesetup to work [patches have been sent to
+  SourceForge.net's Python project].
+
+- Supports NSAutoReleasepool.
+
+- Some pre-OSX stuff removed;  references to old APIs, etc... (but
+  nowhere near clean)
+
+Version 0.55, 18 August 1998:
+
+- Here again, supporting GNU_RUNTIME and GNUstep Base! On my new Linux
+  box I can finally test the module against them: I installed the
+  latest snapshot of gstep-core, that contains the base library
+  too. Given a sane GNUstep env (GNUSTEP_XXX env vars), you should be
+  able to build a static ObjC-ized interpreter by:
+    o Adjusting Setup, commenting out NeXT definition and enabling GNU
+      ones;
+    o make -f Makefile.pre.in boot
+    o make static
+
+Version 0.54, 24 March 1998:
+
+- OC_Pasteboard.[hm], OC_Stream.[mh] and ObjCStreams.m are definitively gone.
+- OC_PythonObject derives from NSProxy.
+
+Version 0.53, 4 January 1998:
+
+- Tons of changes, retargeting the core functionality around the
+  OpenSTEP API. This release basically matches the previous one
+  in terms of functionalities, but is should be closer to GNUstep.
+- OC_Streams and OC_Pasteboard aren't supported, I've not yet decided
+  if they are needed anymore.
+- Updated LittleButtonedWindow demo.
+
+Version 0.47, 29 October 1996:
+
+- Misc/Makefile.pre.in automatically sets TARGET to `pyobjc'.
+- ObjC.m splitted to ObjCObject.m ObjCMethod.m ObjCPointer.m
+  ObjCRuntime.m.
+- New (almost invisible) types: ObjCSequenceObject and
+  ObjCMappingObject; this to implement sequence and mapping syntax
+  (several mapping methods have stub implementation).
+- OC_Pasteboard class is gone. Its functionalities are now in a
+  category of Pasteboard/NSPasteboard.
+- Better methods doc.
+- PyArg_ParseTuple format strings contain arguments names.
+- OC_Streams are mapped to ObjCStreams by pythonify_c_value and its
+  counterpart.
+
+Version 0.46, 18 October 1996:
+
+- OC_Stream is now a subclass of NSData under Foundation.
+- New Objective-C class: OC_Pasteboard. Use it instead of Pasteboard/
+  NSPasteboard. 
+- New Objective-C class: OC_PythonBundle. Use it instead of NXBundle/NSBundle.
+  The ShellText demo has been upgraded to use it, and now you can run it
+  directly from the WorkSpace.
+- OC_Python.[hm] aren't in the package anymore.
+- Setup.in directives changed again, due to OC_Python.m dropping.
+
+Version 0.45, 14 October 1996:
+
+- Double syntax: to make it easier for us to test and choose the
+  better candidate, the only one that will be present in the final 1.0
+  release. Keeping both would result in a speed penality.
+- Revisited streams, in particular GNUstep support.
+
+Version 0.44, 9 October 1996:
+
+- Integers are now accepted too where floats or doubles are expected.
+- New method: ObjC.make_pointer (1) returns an ObjCPointer containing
+  ((void *) 1).
+
+Version 0.43, 7 October 1996:
+
+- Completed ObjCStream implementation. There is now a new module, ObjCStreams
+  which is automatically loaded by ObjC. You can access it as ObjC.streams.
+- Manual splitted in three parts: libPyObjC.tex with the chapter intro,
+  libObjC.tex describing the main module, libObjCStreams.tex explains the
+  stream facilities.
+
+Version 0.42, 4 October 1996:
+
+- You can pass initialization arguments when using the Class() syntax. You
+  select the right initializer selector with the `init' keyword parameter.
+- First cut on ObjCStream objects. Thanx to Bill Bumgarner for motivations.
+- New demo ShellText, to test above points.
+
+Version 0.41, 2 October 1996:
+
+- Revised error messages: for arguments type mismatch they show the ObjC type
+  expected.
+- When a method returns a pointer to something, it gets translated as an
+  ObjCPointer object, not the pythonified pointed value. When a method
+  expects a pointer argument, it accepts such an object as well.
+- New demo: Fred. To halt it, suspend the Python process with ^Z then kill
+  it ;-).
+- Setup.in directives changed. See the new file Modules/Setup.PyObjC.in
+- Distribuited as a standalone package. Special thanks to Bill Bumgarner.
+
+Version 0.4, 27 September 1996:
+
+- Now handles methods returning doubles or floats.
+- ObjCRuntime responds to .sel_is_mapped().
+
+Version 0.31, 26 September 1996:
+
+- It's now possible to use a different strategy to map ObjC method names to
+  Python ones. Sooner or later we should decide the one to go, and drop the
+  other. For details, see comments on PYTHONIFY_WITH_DOUBLE_UNDERSCORE in
+  objc_support.h.
+- Manual section.
+- ObjC.runtime.__dict__ added.
+- ObjC.runtime.kind added.
+
+Version 0.3, 20 September 1996:
+
+- No user visible changes, just a little effort towards GNU_RUNTIME support. 
+
+Version 0.2, 16 September 1996:
+
+- Accepts a struct.pack() string for pointer arguments, but...
+- ... New methods on ObjCMethod: .pack_argument and .unpack_argument:
+  these should be used whenever an ObjC method expects a passed-by-reference
+  argument; for example, on NeXTSTEP [View getFrame:] expects a pointer
+  to an NXRect structure, that it will fill with the current frame of the
+  view: in this case you should use something similar to
+        framep = aView.getFrame__.pack_argument (0)
+        aView.getFrame__ (framep)
+        frame = aView.getFrame__.unpack_argument (0, framep)
+
+Version 0.1, 13 September 1996:
+
+- Correctly handle pointer arguments.
+- New syntax to get a class: ObjC.runtime.NameOfClass
+- New syntax aliasing .new(): SomeClass()
+- New Demo: LittleButtonedWindow, that tests points above.
+- What follow is the recipe to get PyObjC dinamically loadable on NeXTSTEP:
+        * apply the patch in Misc/INSTALL.PyObjC to Python/importdl.c
+        * modify Python/Makefile adding the switch ``-ObjC'' to the importdl.o
+          build rule:
+          importdl.o:   importdl.c
+                $(CC) -ObjC -c $(CFLAGS) -I$(DLINCLDIR) $(srcdir)/importdl.c
+        * modify Modules/Setup moving the PyObjC entry suggested above AFTER
+          ``*shared*'', and remove ``-u libNeXT_s -lNeXT_s'' from it.
+        * run ``make'': this will update various files, in particular
+          Modules/Makefile.
+        * modify Modules/Makefile adding ``-u libNeXT_s -lNeXT_s'' to SYSLIBS:
+          SYSLIBS=      $(LIBM) $(LIBC) -u libNeXT_s -lNeXT_s
+        * run ``make'' again
+

pyobjc-web/docroot/NEWS.txt

-# -*- indented-text -*-
-#
-# This file is part of the PyObjC package.
-#
-
-WHAT'S NEW:
-
-Version 0.9 (May-02-2003):
-- This version includes numerous bugfixes and improvements.
-
-- The module AppKit.NibClassBuilder has been moved to the package
-  PyObjCTools.
-
-- Usage of libFFI (http://sources.redhat.com/libffi) is now mandatory. The
-  setup.py gives the impression that it isn't, but we do *not* support 
-  non-FFI builds.
-
-- We actually have some documentation, more will be added in future releases.
-
-- There are more Project Builder templates (see 'Project Templates').
-
-- The InterfaceBuilder, PreferencePanes and ScreenSaver frameworks have been
-  wrapped.
-
-- Management of reference counts is now completely automatic, it is no longer
-  necessary to manually compensate for the higher reference count of objects 
-  returned by the alloc, copy and copyWithZone: class methods.
-
-- Various function and keyword arguments have been renamed for a better 
-  integration with Cocoa. A partial list is of the changed names is:
-  	objc.lookup_class -> objc.lookUpClass
-	objc.selector arguments/attributes:
-		is_initializer -> isInitializer
-		is_allocator -> isAlloc
-		donates_ref -> doesDonateReference
-		is_required -> isRequired
-		class_method -> isClassMethod
-		defining_class -> definingClass
-		returns_self -> returnsSelf
-		argument_types -> argumentTypes
-		return_type -> returnType
-	objc.get_class_list -> objc.getClassList
-
-- On Python 2.2, objc.YES and objc.NO are instances of a private boolean type,
-  on Python 2.3 these are instances of the builtin type bool.
-
-
-Version 0.8 (Dec-10-2002):
-
-- GNUStep support has been removed for lack of support.  Volunteers
-  needed.
-
-- Subclassing Objective-C classes from Python, including the addition
-  of instance variables (like 'IBOutlet's)
-
-- Generic support for pass-by-reference arguments
-
-- More complete Cocoa package, including wrappers for a number of 
-  C functions, enumerated types, and globals.
-
-- More example code
-
-- Objective-C mappings and sequences can be accessed using the normal
-  python methods for accessing mappings and sequences (e.g. subscripting
-  works as expected)
-
-- Documentation: See the directory 'docs'
-
-- Can build standalone Cocoa applications based entirely on Python
-  without requiring that user installs anything extra (requires 10.2).
-
-- Better packaging and wrapper construction tools (borrowed from
-  MacPython).
-
-- An installer package.
-
-- Support for Project Builder based Cocoa-Python projects.
-
-- Unit tests.
-
-Version 2002-01-30 (January 30, 2002):
-
-- Version bumped to 0.6.1 ( __version__ is now a PyString )
-
-- Will now build for Python 2.2
-
-- added Cocoa package with Foundation.py and AppKit.py wrappers.
-
-- HelloWorld.py in Examples
-
-- builds with -g flag for debugging. -v option will dump log
-  of message sends to /tmp file.
-
-- Fixed one major runtime bug: added ISCLASS test before isKindOfClass -
-  without check, it crashes on sends to abstract classes like NSProxy.
-
-- There are still problems with Delegates and Notifications. 
-
-Version 2001-03-17 (March 17, 2001):
-
-- moved to using distutils setup.py (requires small patch to distutils
-  that has been submitted against python 2.1b1)
-
-Version 2000-11-14 (November 14, 2000):
-
-- GNU_RUNTIME is likely completely broken
-
-- Compiles on Mac OS X Server (python 2.0)
-
-- Compiles on Mac OS X (python 2.0)
-
-- Works as either a dynamically loadable module or statically built
-  into a python executable
-
-- Requires a modified makesetup to work [patches have been sent to
-  SourceForge.net's Python project].
-
-- Supports NSAutoReleasepool.
-
-- Some pre-OSX stuff removed;  references to old APIs, etc... (but
-  nowhere near clean)
-
-Version 0.55, 18 August 1998:
-
-- Here again, supporting GNU_RUNTIME and GNUstep Base! On my new Linux
-  box I can finally test the module against them: I installed the
-  latest snapshot of gstep-core, that contains the base library
-  too. Given a sane GNUstep env (GNUSTEP_XXX env vars), you should be
-  able to build a static ObjC-ized interpreter by:
-    o Adjusting Setup, commenting out NeXT definition and enabling GNU
-      ones;
-    o make -f Makefile.pre.in boot
-    o make static
-
-Version 0.54, 24 March 1998:
-
-- OC_Pasteboard.[hm], OC_Stream.[mh] and ObjCStreams.m are definitively gone.
-- OC_PythonObject derives from NSProxy.
-
-Version 0.53, 4 January 1998:
-
-- Tons of changes, retargeting the core functionality around the
-  OpenSTEP API. This release basically matches the previous one
-  in terms of functionalities, but is should be closer to GNUstep.
-- OC_Streams and OC_Pasteboard aren't supported, I've not yet decided
-  if they are needed anymore.
-- Updated LittleButtonedWindow demo.
-
-Version 0.47, 29 October 1996:
-
-- Misc/Makefile.pre.in automatically sets TARGET to `pyobjc'.
-- ObjC.m splitted to ObjCObject.m ObjCMethod.m ObjCPointer.m
-  ObjCRuntime.m.
-- New (almost invisible) types: ObjCSequenceObject and
-  ObjCMappingObject; this to implement sequence and mapping syntax
-  (several mapping methods have stub implementation).
-- OC_Pasteboard class is gone. Its functionalities are now in a
-  category of Pasteboard/NSPasteboard.
-- Better methods doc.
-- PyArg_ParseTuple format strings contain arguments names.
-- OC_Streams are mapped to ObjCStreams by pythonify_c_value and its
-  counterpart.
-
-Version 0.46, 18 October 1996:
-
-- OC_Stream is now a subclass of NSData under Foundation.
-- New Objective-C class: OC_Pasteboard. Use it instead of Pasteboard/
-  NSPasteboard. 
-- New Objective-C class: OC_PythonBundle. Use it instead of NXBundle/NSBundle.
-  The ShellText demo has been upgraded to use it, and now you can run it
-  directly from the WorkSpace.
-- OC_Python.[hm] aren't in the package anymore.
-- Setup.in directives changed again, due to OC_Python.m dropping.
-
-Version 0.45, 14 October 1996:
-
-- Double syntax: to make it easier for us to test and choose the
-  better candidate, the only one that will be present in the final 1.0
-  release. Keeping both would result in a speed penality.
-- Revisited streams, in particular GNUstep support.
-
-Version 0.44, 9 October 1996:
-
-- Integers are now accepted too where floats or doubles are expected.
-- New method: ObjC.make_pointer (1) returns an ObjCPointer containing
-  ((void *) 1).
-
-Version 0.43, 7 October 1996:
-
-- Completed ObjCStream implementation. There is now a new module, ObjCStreams
-  which is automatically loaded by ObjC. You can access it as ObjC.streams.
-- Manual splitted in three parts: libPyObjC.tex with the chapter intro,
-  libObjC.tex describing the main module, libObjCStreams.tex explains the
-  stream facilities.
-
-Version 0.42, 4 October 1996:
-
-- You can pass initialization arguments when using the Class() syntax. You
-  select the right initializer selector with the `init' keyword parameter.
-- First cut on ObjCStream objects. Thanx to Bill Bumgarner for motivations.
-- New demo ShellText, to test above points.
-
-Version 0.41, 2 October 1996:
-
-- Revised error messages: for arguments type mismatch they show the ObjC type
-  expected.
-- When a method returns a pointer to something, it gets translated as an
-  ObjCPointer object, not the pythonified pointed value. When a method
-  expects a pointer argument, it accepts such an object as well.
-- New demo: Fred. To halt it, suspend the Python process with ^Z then kill
-  it ;-).
-- Setup.in directives changed. See the new file Modules/Setup.PyObjC.in
-- Distribuited as a standalone package. Special thanks to Bill Bumgarner.
-
-Version 0.4, 27 September 1996:
-
-- Now handles methods returning doubles or floats.
-- ObjCRuntime responds to .sel_is_mapped().
-
-Version 0.31, 26 September 1996:
-
-- It's now possible to use a different strategy to map ObjC method names to
-  Python ones. Sooner or later we should decide the one to go, and drop the
-  other. For details, see comments on PYTHONIFY_WITH_DOUBLE_UNDERSCORE in
-  objc_support.h.
-- Manual section.
-- ObjC.runtime.__dict__ added.
-- ObjC.runtime.kind added.
-
-Version 0.3, 20 September 1996:
-
-- No user visible changes, just a little effort towards GNU_RUNTIME support. 
-
-Version 0.2, 16 September 1996:
-
-- Accepts a struct.pack() string for pointer arguments, but...
-- ... New methods on ObjCMethod: .pack_argument and .unpack_argument:
-  these should be used whenever an ObjC method expects a passed-by-reference
-  argument; for example, on NeXTSTEP [View getFrame:] expects a pointer
-  to an NXRect structure, that it will fill with the current frame of the
-  view: in this case you should use something similar to
-        framep = aView.getFrame__.pack_argument (0)
-        aView.getFrame__ (framep)
-        frame = aView.getFrame__.unpack_argument (0, framep)
-
-Version 0.1, 13 September 1996:
-
-- Correctly handle pointer arguments.
-- New syntax to get a class: ObjC.runtime.NameOfClass
-- New syntax aliasing .new(): SomeClass()
-- New Demo: LittleButtonedWindow, that tests points above.
-- What follow is the recipe to get PyObjC dinamically loadable on NeXTSTEP:
-        * apply the patch in Misc/INSTALL.PyObjC to Python/importdl.c
-        * modify Python/Makefile adding the switch ``-ObjC'' to the importdl.o
-          build rule:
-          importdl.o:   importdl.c
-                $(CC) -ObjC -c $(CFLAGS) -I$(DLINCLDIR) $(srcdir)/importdl.c
-        * modify Modules/Setup moving the PyObjC entry suggested above AFTER
-          ``*shared*'', and remove ``-u libNeXT_s -lNeXT_s'' from it.
-        * run ``make'': this will update various files, in particular
-          Modules/Makefile.
-        * modify Modules/Makefile adding ``-u libNeXT_s -lNeXT_s'' to SYSLIBS:
-          SYSLIBS=      $(LIBM) $(LIBC) -u libNeXT_s -lNeXT_s
-        * run ``make'' again
-

pyobjc-web/docroot/doc/api-notes-macosx.php

+<?
+    $title = "Notes on supported APIs and classes on MacOS X";
+    $cvs_author = '$Author: ronaldoussoren $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
+
+    include "header.inc";
+?>
+<div class="document" id="notes-on-supported-apis-and-classes-on-macos-x">
+<h1 class="title">Notes on supported APIs and classes on MacOS X</h1>
+<!-- :author: Ronald Oussoren -->
+<div class="contents topic" id="contents">
+<p class="topic-title"><a name="contents">Contents</a></p>
+<ul class="simple">
+<li><a class="reference" href="#introduction" id="id2" name="id2">Introduction</a></li>
+<li><a class="reference" href="#core-objective-c-runtime" id="id3" name="id3">Core objective-C runtime</a><ul>
+<li><a class="reference" href="#class-protocol" id="id4" name="id4">Class Protocol</a></li>
+</ul>
+</li>
+<li><a class="reference" href="#addressbook-framework" id="id5" name="id5">Addressbook framework</a></li>
+<li><a class="reference" href="#appkit-framework" id="id6" name="id6">AppKit framework</a><ul>
+<li><a class="reference" href="#class-nsapplication" id="id7" name="id7">Class NSApplication</a></li>
+<li><a class="reference" href="#class-nsbezierpath" id="id8" name="id8">Class NSBezierPath</a></li>
+<li><a class="reference" href="#class-nsbitmapimagerep" id="id9" name="id9">Class <tt class="literal"><span class="pre">NSBitmapImageRep</span></tt></a></li>
+<li><a class="reference" href="#class-nsfont" id="id10" name="id10">Class <tt class="literal"><span class="pre">NSFont</span></tt></a></li>
+<li><a class="reference" href="#class-nsgraphicscontext" id="id11" name="id11">Class <tt class="literal"><span class="pre">NSGraphicsContext</span></tt></a></li>
+<li><a class="reference" href="#class-nslayoutmanager" id="id12" name="id12">Class <tt class="literal"><span class="pre">NSLayoutManager</span></tt></a></li>
+<li><a class="reference" href="#class-nsmatrix" id="id13" name="id13">Class <tt class="literal"><span class="pre">NSMatrix</span></tt></a></li>
+<li><a class="reference" href="#class-nsmovie" id="id14" name="id14">Class <tt class="literal"><span class="pre">NSMovie</span></tt></a></li>
+<li><a class="reference" href="#class-nsopenglcontext" id="id15" name="id15">Class <tt class="literal"><span class="pre">NSOpenGLContext</span></tt></a></li>
+<li><a class="reference" href="#class-nsopenglpixelformat" id="id16" name="id16">Class <tt class="literal"><span class="pre">NSOpenGLPixelFormat</span></tt></a></li>
+<li><a class="reference" href="#class-nsquickdrawview" id="id17" name="id17">Class <tt class="literal"><span class="pre">NSQuickDrawView</span></tt></a></li>
+<li><a class="reference" href="#class-nssimplehorizontaltypesetter" id="id18" name="id18">Class <tt class="literal"><span class="pre">NSSimpleHorizontalTypesetter</span></tt></a></li>
+<li><a class="reference" href="#class-nsview" id="id19" name="id19">Class <tt class="literal"><span class="pre">NSView</span></tt></a></li>
+<li><a class="reference" href="#class-nswindow" id="id20" name="id20">Class <tt class="literal"><span class="pre">NSWindow</span></tt></a></li>
+</ul>
+</li>
+<li><a class="reference" href="#foundation-framework" id="id21" name="id21">Foundation framework</a><ul>
+<li><a class="reference" href="#class-nsarray" id="id22" name="id22">Class <tt class="literal"><span class="pre">NSArray</span></tt></a></li>
+<li><a class="reference" href="#class-nsbundle" id="id23" name="id23">Class <tt class="literal"><span class="pre">NSBundle</span></tt></a></li>
+<li><a class="reference" href="#class-nscoder" id="id24" name="id24">Class <tt class="literal"><span class="pre">NSCoder</span></tt></a></li>
+<li><a class="reference" href="#class-nsdata" id="id25" name="id25">Class <tt class="literal"><span class="pre">NSData</span></tt></a></li>
+<li><a class="reference" href="#class-nsdictionary" id="id26" name="id26">Class <tt class="literal"><span class="pre">NSDictionary</span></tt></a></li>
+<li><a class="reference" href="#class-nsfault" id="id27" name="id27">Class <tt class="literal"><span class="pre">NSFault</span></tt></a></li>
+<li><a class="reference" href="#class-nsmutablearray" id="id28" name="id28">Class <tt class="literal"><span class="pre">NSMutableArray</span></tt></a></li>
+<li><a class="reference" href="#class-nsnetservice" id="id29" name="id29">Class <tt class="literal"><span class="pre">NSNetService</span></tt></a></li>
+<li><a class="reference" href="#class-nsscriptobjectspecifier" id="id30" name="id30">Class <tt class="literal"><span class="pre">NSScriptObjectSpecifier</span></tt></a></li>
+<li><a class="reference" href="#class-nsset" id="id31" name="id31">Class <tt class="literal"><span class="pre">NSSet</span></tt></a></li>
+<li><a class="reference" href="#class-nsstring" id="id32" name="id32">Class <tt class="literal"><span class="pre">NSString</span></tt></a></li>
+</ul>
+</li>
+<li><a class="reference" href="#interfacebuilder-framework" id="id33" name="id33">InterfaceBuilder framework</a><ul>
+<li><a class="reference" href="#class-ibobjcsourceparser" id="id34" name="id34">Class <tt class="literal"><span class="pre">IBObjCSourceParser</span></tt></a></li>
+<li><a class="reference" href="#id1" id="id35" name="id35">Class <tt class="literal"><span class="pre">NSView</span></tt></a></li>
+<li><a class="reference" href="#class-nsibobjectdata" id="id36" name="id36">Class <tt class="literal"><span class="pre">NSIBObjectData</span></tt></a></li>
+<li><a class="reference" href="#class-ibobjectcontainer" id="id37" name="id37">Class <tt class="literal"><span class="pre">IBObjectContainer</span></tt></a></li>
+<li><a class="reference" href="#class-ibxmldecoder" id="id38" name="id38">Class <tt class="literal"><span class="pre">IBXMLDecoder</span></tt></a></li>
+<li><a class="reference" href="#class-ibsplitscrollview" id="id39" name="id39">Class <tt class="literal"><span class="pre">IBSplitScrollView</span></tt></a></li>
+</ul>
+</li>
+<li><a class="reference" href="#preferencepanes-framework" id="id40" name="id40">PreferencePanes framework</a></li>
+<li><a class="reference" href="#screensaver-framework" id="id41" name="id41">ScreenSaver framework</a><ul>
+<li><a class="reference" href="#class-screensaverdefaults" id="id42" name="id42">Class <tt class="literal"><span class="pre">ScreenSaverDefaults</span></tt></a></li>
+<li><a class="reference" href="#class-screensaverview" id="id43" name="id43">Class <tt class="literal"><span class="pre">ScreenSaverView</span></tt></a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="introduction">
+<h1><a class="toc-backref" href="#id2" name="introduction">Introduction</a></h1>
+<p>This document describes the restrictions w.r.t. supported APIs and classes
+on MacOS X. In general you can use classes and global functions just like
+in Objective-C (e.g. the Apple developer documentaton applies), but in some
+cases there are special considerations.</p>
+<p>We also do not provide access to global functions that are not usefull for
+Python programs, those functions are listed below.</p>
+<p>This document list the examples to the basic rules. If a method uses pointers
+to return additional values, the Python wrapper for that method returns a tuple
+containing the original return value and the additional values. You don't have
+to pass values for those arguments, unless the method uses the values you
+pass in.</p>
+<p>This document is target at the latest supported version of MacOS X (currenlty
+MacOS X 10.2.x), unless specifically noted the same restrictions apply to 
+earlier versions of MacOS X. Earlier versions of the OS have less extensive
+APIs, PyObjC does <em>not</em> provide a compatibility layer.</p>
+<p>Frameworks not listed below are not wrapped by PyObjC, they can still be
+accessed although without access to constants and global functions defined
+by those frameworks.</p>
+<p>This document is not entirely complete, but does cover the most used APIs.</p>
+</div>
+<div class="section" id="core-objective-c-runtime">
+<h1><a class="toc-backref" href="#id3" name="core-objective-c-runtime">Core objective-C runtime</a></h1>
+<div class="section" id="class-protocol">
+<h2><a class="toc-backref" href="#id4" name="class-protocol">Class Protocol</a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">descriptionForClassMethod:</span></tt>, <tt class="literal"><span class="pre">descriptionForInstanceMethod</span></tt>
+These methods are not supported, protocols are hardly ever used explicitly
+in Cocoa therefore this should not be a problem.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="addressbook-framework">
+<h1><a class="toc-backref" href="#id5" name="addressbook-framework">Addressbook framework</a></h1>
+<p>We do not provide access to the global functions in that framework, because
+the same functionality can be accessed by using the object-oriented interface.</p>
+</div>
+<div class="section" id="appkit-framework">
+<h1><a class="toc-backref" href="#id6" name="appkit-framework">AppKit framework</a></h1>
+<p><tt class="literal"><span class="pre">NSPoint</span></tt> is a tuple of 2 floats, or use <tt class="literal"><span class="pre">AppKit.NSMakePoint(x,</span> <span class="pre">y)</span></tt>.</p>
+<p><tt class="literal"><span class="pre">NSSize</span></tt> is a tuple of 2 floats, or use <tt class="literal"><span class="pre">AppKit.NSMakeSize(h,</span> <span class="pre">w)</span></tt>.</p>
+<p><tt class="literal"><span class="pre">NSRect</span></tt> is a tuple of an <tt class="literal"><span class="pre">NSPoint</span></tt> and an <tt class="literal"><span class="pre">NSSize</span></tt>, or 
+use <tt class="literal"><span class="pre">AppKit.NSMakeRect(x,</span> <span class="pre">y,</span> <span class="pre">h,</span> <span class="pre">w)</span></tt>.</p>
+<p>The callback methods for the NSSheet API's have a non-default signature
+and no fixed name. You should therefore explicitly specify the signature. This
+is done by calling the <tt class="literal"><span class="pre">endSheetMethod</span></tt> function after defining your
+callback:</p>
+<pre class="literal-block">
+class MYClass (NSObject):
+        def mysheetDidEnd(self, panel, returnCode, contextInfo):
+                &quot;&quot;&quot; Actual implementation goes here &quot;&quot;&quot;
+                pass
+
+        mysheetDidEnd = PyObjCTools.AppHelper.endSheetMethod(
+                mysheetDidEnd)
+</pre>
+<div class="section" id="class-nsapplication">
+<h2><a class="toc-backref" href="#id7" name="class-nsapplication">Class NSApplication</a></h2>
+<p><tt class="literal"><span class="pre">NSModalSession</span></tt> objects are wrapped as opaque values. You can check if
+two wrapper objects refer to the same session object by comparing their
+<tt class="literal"><span class="pre">ptr</span></tt> attributes.</p>
+</div>
+<div class="section" id="class-nsbezierpath">
+<h2><a class="toc-backref" href="#id8" name="class-nsbezierpath">Class NSBezierPath</a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">getLineDash:count:phase:</span></tt>
+This method is not supported, I (Ronald) could not find a way to detect the
+required size for the pattern buffer.</li>
+<li><tt class="literal"><span class="pre">appendBezierPathWithGlyphs:count:inFont:</span></tt>
+The first argument is a list of integers, count should be at most the lenght
+of the first argument.</li>
+<li><tt class="literal"><span class="pre">appendBezierPathWithPoints:count:</span></tt>
+The first argument is a list of points, count should be at most the lenght
+of the first argument.</li>
+<li><tt class="literal"><span class="pre">setAssociatedPoints:atIndex:</span></tt>
+Implementing this method in Python is not yet supported.</li>
+</ul>
+</div>
+<div class="section" id="class-nsbitmapimagerep">
+<h2><a class="toc-backref" href="#id9" name="class-nsbitmapimagerep">Class <tt class="literal"><span class="pre">NSBitmapImageRep</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">getBitMapDataPlanes</span></tt>
+This method is not supported (yet)</li>
+<li><tt class="literal"><span class="pre">getTIFFCompressionTypes:count:</span></tt>
+This method is not supported (yet)</li>
+<li><tt class="literal"><span class="pre">initWithBitmapDataPlanes:pixesWide:pixelsHigh:bitPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:</span></tt>
+This method is not supported (yet)</li>
+</ul>
+</div>
+<div class="section" id="class-nsfont">
+<h2><a class="toc-backref" href="#id10" name="class-nsfont">Class <tt class="literal"><span class="pre">NSFont</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">positionsForCompositeSequence:numberOfGlyphs:pointArray:</span></tt>
+This method is not supported (yet)</li>
+</ul>
+</div>
+<div class="section" id="class-nsgraphicscontext">
+<h2><a class="toc-backref" href="#id11" name="class-nsgraphicscontext">Class <tt class="literal"><span class="pre">NSGraphicsContext</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">focusStack</span></tt>
+This method is not supported.</li>
+<li><tt class="literal"><span class="pre">setFocusStack</span></tt>
+This method is not supported.</li>
+<li><tt class="literal"><span class="pre">graphicsPort</span></tt>
+This method is not yet supported.</li>
+</ul>
+</div>
+<div class="section" id="class-nslayoutmanager">
+<h2><a class="toc-backref" href="#id12" name="class-nslayoutmanager">Class <tt class="literal"><span class="pre">NSLayoutManager</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">getGlyphs:range:</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:bidiLevels:</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">rectArrayForCharacterRange:withinSelectedCharacterRange:inTextContainer:rectCount:</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">rectArrayForGlyphRange:withinSelectedGlyphRange:inTextContainer:rectCount:</span></tt>
+This method is not yet supported</li>
+</ul>
+</div>
+<div class="section" id="class-nsmatrix">
+<h2><a class="toc-backref" href="#id13" name="class-nsmatrix">Class <tt class="literal"><span class="pre">NSMatrix</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">sortUsingFunction:context</span></tt>
+Calling this method from Python is supported, overriding it in Python
+is not. The <tt class="literal"><span class="pre">context</span></tt> can be an arbitrary python object.</li>
+</ul>
+</div>
+<div class="section" id="class-nsmovie">
+<h2><a class="toc-backref" href="#id14" name="class-nsmovie">Class <tt class="literal"><span class="pre">NSMovie</span></tt></a></h2>
+<p>The return value of <tt class="literal"><span class="pre">QTMovie</span></tt> and the sole argument of <tt class="literal"><span class="pre">initWithMovie:</span></tt>
+are QT.Movie objects. Using these methods requires the use of MacPython 2.3.</p>
+</div>
+<div class="section" id="class-nsopenglcontext">
+<h2><a class="toc-backref" href="#id15" name="class-nsopenglcontext">Class <tt class="literal"><span class="pre">NSOpenGLContext</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">getValues:forParameter:</span></tt>
+This method is not yet supported.</li>
+<li><tt class="literal"><span class="pre">setValues:forParameter:</span></tt>
+This method is not yet supported.</li>
+<li><tt class="literal"><span class="pre">setOffScreen:width:height:rowbytes:</span></tt>
+This method is not yet supported.</li>
+</ul>
+</div>
+<div class="section" id="class-nsopenglpixelformat">
+<h2><a class="toc-backref" href="#id16" name="class-nsopenglpixelformat">Class <tt class="literal"><span class="pre">NSOpenGLPixelFormat</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">getValues:forAttribute:forVirtualScreen:</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">initWithAttributes:</span></tt>
+This method is not yet supported</li>
+</ul>
+</div>
+<div class="section" id="class-nsquickdrawview">
+<h2><a class="toc-backref" href="#id17" name="class-nsquickdrawview">Class <tt class="literal"><span class="pre">NSQuickDrawView</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">qdPort</span></tt>
+This method is not yet supported and will return a MacPython wrapper for
+a QuickDraw port in the future.</li>
+</ul>
+</div>
+<div class="section" id="class-nssimplehorizontaltypesetter">
+<h2><a class="toc-backref" href="#id18" name="class-nssimplehorizontaltypesetter">Class <tt class="literal"><span class="pre">NSSimpleHorizontalTypesetter</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">baseOfTypesetterGlyphInfo</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">layoutGlyphsInHorizontalLineFragment:baseline:</span></tt>
+This method is not yet supported</li>
+</ul>
+</div>
+<div class="section" id="class-nsview">
+<h2><a class="toc-backref" href="#id19" name="class-nsview">Class <tt class="literal"><span class="pre">NSView</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">sortSubviewsUsingFunction:context:</span></tt>
+Calling this method from Python is supported, overriding it in Python
+is not. The <tt class="literal"><span class="pre">context</span></tt> can be an arbitrary python object.</li>
+</ul>
+</div>
+<div class="section" id="class-nswindow">
+<h2><a class="toc-backref" href="#id20" name="class-nswindow">Class <tt class="literal"><span class="pre">NSWindow</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">graphicsPort</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">initWithWindowRef:</span></tt>
+This method is not yet supported</li>
+<li><tt class="literal"><span class="pre">windowRef</span></tt>
+This method is not yet supported</li>
+</ul>
+</div>
+</div>
+<div class="section" id="foundation-framework">
+<h1><a class="toc-backref" href="#id21" name="foundation-framework">Foundation framework</a></h1>
+<p>NOTE: The list below is mostly based on scripts that find methods that can
+not be automaticly handled by the bridge. We have not yet performed a manual
+search for such methods in the Cocoa documentation.</p>
+<p>The <tt class="literal"><span class="pre">-forward::</span></tt> method is not supported. It's functionality can be accessed
+using the python function <tt class="literal"><span class="pre">apply</span></tt>. The <tt class="literal"><span class="pre">performv::</span></tt> method is also not
+supported, with a simular work-around.</p>
+<div class="section" id="class-nsarray">
+<h2><a class="toc-backref" href="#id22" name="class-nsarray">Class <tt class="literal"><span class="pre">NSArray</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">initWithObjects:</span></tt>, <tt class="literal"><span class="pre">arrayWithObjects:</span></tt>
+These methods are not supported, use <tt class="literal"><span class="pre">initWithArray:</span></tt> instead.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getObjects:</span></tt>
+This method is not supported, accessing the objects using the usual
+accessor methods is just as efficient as using this method.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getObjects:inRange:</span></tt>
+This method is not supported, accessing the objects using the usual
+accessor methods is just as efficient as using this method.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">sortedArrayUsingFunction:context:</span></tt> and <tt class="literal"><span class="pre">sortedArrayUsingFunction:context:hint</span></tt>
+These methods can be called from Python, but you cannot override them
+from Python. This limitation will be lifted in a future version of PyObjC.</p>
+<p>The <tt class="literal"><span class="pre">context</span></tt> can be an arbitrary python object.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="class-nsbundle">
+<h2><a class="toc-backref" href="#id23" name="class-nsbundle">Class <tt class="literal"><span class="pre">NSBundle</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">bundleForClass:</span></tt>
+This method does not work correctly for classes defined in Python, these
+all seem be defined in the <tt class="literal"><span class="pre">mainBundle()</span></tt>. As a workaround you can use
+the function <tt class="literal"><span class="pre">objc.pluginBundle(name)</span></tt> to find the NSBundle for your
+Python based bundle. See Examples/PrefPane for an example of its usage.</li>
+</ul>
+</div>
+<div class="section" id="class-nscoder">
+<h2><a class="toc-backref" href="#id24" name="class-nscoder">Class <tt class="literal"><span class="pre">NSCoder</span></tt></a></h2>
+<p>The following methods are not supported in the current version of PyObjC.
+This limitation will be lifted in a future version of the bridge.</p>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">encodeBytes:length:</span></tt></li>
+<li><tt class="literal"><span class="pre">decodeBytesWithReturnedLength:</span></tt></li>
+<li><tt class="literal"><span class="pre">encodeValuesOfObjCType:</span></tt></li>
+<li><tt class="literal"><span class="pre">decodeValuesOfObjCType:</span></tt></li>
+<li><tt class="literal"><span class="pre">decodeBytesForKey:returnedLength:</span></tt></li>
+<li><tt class="literal"><span class="pre">decodeBytesWithoutReturnedLength:</span></tt></li>
+</ul>
+</div>
+<div class="section" id="class-nsdata">
+<h2><a class="toc-backref" href="#id25" name="class-nsdata">Class <tt class="literal"><span class="pre">NSData</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">initWithBytesNoCopy:length:</span></tt>
+This method is not supported, use <tt class="literal"><span class="pre">initWithBytes:length:</span></tt> instead.</li>
+<li><tt class="literal"><span class="pre">initWithBytesNoCopy:length:freeWhenDone:</span></tt>
+This method is not supported, use <tt class="literal"><span class="pre">initWithBytes:length:</span></tt> instead.</li>
+<li><tt class="literal"><span class="pre">dataWithBytesNoCopy:length:</span></tt>
+This method is not supported, use <tt class="literal"><span class="pre">dataWithBytes:length:</span></tt> instead.</li>
+<li><tt class="literal"><span class="pre">dataWithBytesNoCopy:length:freeWhenDone:</span></tt>
+This method is not supported, use <tt class="literal"><span class="pre">dataWithBytes:length:</span></tt> instead.</li>
+<li><tt class="literal"><span class="pre">deserializeAlignedBytesLengthAtCursor:</span></tt>
+This is a depricated method, see Apple documentation.</li>
+<li><tt class="literal"><span class="pre">deserializeBytes:length:atCursor:</span></tt>
+This is a depricated method, see Apple documentation.</li>
+<li><tt class="literal"><span class="pre">deserializeDataAt:ofObjCType:atCursor:context:</span></tt>
+This is a depricated method, see Apple documentation.</li>
+<li><tt class="literal"><span class="pre">deserializeIntAtCursor:</span></tt>
+This is a depricated method, see Apple documentation.</li>
+<li><tt class="literal"><span class="pre">deserializeInts:count:atCursor:</span></tt>
+This is a depricated method, see Apple documentation.</li>
+<li><tt class="literal"><span class="pre">deserializeInts:count:atIndex:</span></tt>
+This is a depricated method, see Apple documentation.</li>
+</ul>
+</div>
+<div class="section" id="class-nsdictionary">
+<h2><a class="toc-backref" href="#id26" name="class-nsdictionary">Class <tt class="literal"><span class="pre">NSDictionary</span></tt></a></h2>
+<p>The (undocumented) methods <tt class="literal"><span class="pre">getKeys:</span></tt>, <tt class="literal"><span class="pre">getObjects:</span></tt> and 
+<tt class="literal"><span class="pre">getObjects:andKeys:</span></tt> are not supported.</p>
+</div>
+<div class="section" id="class-nsfault">
+<h2><a class="toc-backref" href="#id27" name="class-nsfault">Class <tt class="literal"><span class="pre">NSFault</span></tt></a></h2>
+<p>The <tt class="literal"><span class="pre">extraData</span></tt> argument/return value for <tt class="literal"><span class="pre">-extraData</span></tt> and 
+<tt class="literal"><span class="pre">setTargetClassextraData:</span></tt> is represented as an integer.</p>
+</div>
+<div class="section" id="class-nsmutablearray">
+<h2><a class="toc-backref" href="#id28" name="class-nsmutablearray">Class <tt class="literal"><span class="pre">NSMutableArray</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">sortUsingFunction:context:</span></tt>, <tt class="literal"><span class="pre">sortUsingFunction:context:range:</span></tt>
+Calling this method from Python is supported, overriding it in a subclass
+is not. This limitation will be fixed in a later version of PyObjC.</p>
+<p>The <tt class="literal"><span class="pre">context</span></tt> can be an arbitrary python object.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="class-nsnetservice">
+<h2><a class="toc-backref" href="#id29" name="class-nsnetservice">Class <tt class="literal"><span class="pre">NSNetService</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">addresses</span></tt>
+When calling this from Python this methods returns a tuple of adress-info
+tuples, like the values returned by <tt class="literal"><span class="pre">socket.getpeeraddr()</span></tt>.</li>
+</ul>
+</div>
+<div class="section" id="class-nsscriptobjectspecifier">
+<h2><a class="toc-backref" href="#id30" name="class-nsscriptobjectspecifier">Class <tt class="literal"><span class="pre">NSScriptObjectSpecifier</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">indicesOfObjectsByEvaluatingWithContainer:count:</span></tt>
+Implementing this in Python is not supported yet. We're looking for a way
+to avoid leaking the returned buffer, as we cannot return a pointer to an
+internal datastructure.</li>
+</ul>
+</div>
+<div class="section" id="class-nsset">
+<h2><a class="toc-backref" href="#id31" name="class-nsset">Class <tt class="literal"><span class="pre">NSSet</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">initWithObjects:</span></tt>, <tt class="literal"><span class="pre">setWithObjects:</span></tt>
+This method is not supported, use <tt class="literal"><span class="pre">initWithArray:</span></tt> instead.</li>
+</ul>
+</div>
+<div class="section" id="class-nsstring">
+<h2><a class="toc-backref" href="#id32" name="class-nsstring">Class <tt class="literal"><span class="pre">NSString</span></tt></a></h2>
+<p>Objective-C strings are usually represented as instances of a subclass of
+the Python type <tt class="literal"><span class="pre">unicode</span></tt>. It is possible to access the &quot;real&quot; Objective-C
+string by using the method <tt class="literal"><span class="pre">NSString</span></tt>. This should only be necessary when
+dealing with mutable strings, or when you want to access methods that don't
+have a Python equivalent.</p>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">initWithCharactersNoCopy:length:freeWhenDone:</span></tt> 
+This method is unsupported because we cannot guarantee that the buffer wil
+be available as long as the string is. Use <tt class="literal"><span class="pre">initWithCharacters:</span></tt> instead.</li>
+<li><tt class="literal"><span class="pre">getCharacters:</span></tt> and <tt class="literal"><span class="pre">getCharacters:range:</span></tt>
+These methods are not supported at the moment. This limitation will be liften
+in a future version of the bridge.</li>
+<li><tt class="literal"><span class="pre">getCString:maxLength:range:remainingRange:</span></tt> and <tt class="literal"><span class="pre">getCString:maxLength:</span></tt>
+Calling these methods from Python is supported, overriding them from 
+Python is not. This limitation will be liften in a future version of the
+bridge.</li>
+<li><tt class="literal"><span class="pre">getCString:</span></tt>
+This method is not supported. Use <tt class="literal"><span class="pre">getCString:maxLength:</span></tt> instead (using
+the length of the string as the maximum length). This limitation will be
+liften in a future version of the bridge.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="interfacebuilder-framework">
+<h1><a class="toc-backref" href="#id33" name="interfacebuilder-framework">InterfaceBuilder framework</a></h1>
+<p>I (Ronald) have not found documentation for this framework, therefore the
+following methods with a &quot;difficult&quot; signature are not supported.</p>
+<p>Please let me know if there is documentation for this framework.</p>
+<div class="section" id="class-ibobjcsourceparser">
+<h2><a class="toc-backref" href="#id34" name="class-ibobjcsourceparser">Class <tt class="literal"><span class="pre">IBObjCSourceParser</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">parseClass:</span></tt></li>
+</ul>
+</div>
+<div class="section" id="id1">
+<h2><a class="toc-backref" href="#id35" name="id1">Class <tt class="literal"><span class="pre">NSView</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">objectAtPoint:rect:</span></tt>
+Defined in a catagory on <tt class="literal"><span class="pre">NSView</span></tt>.</li>
+</ul>
+</div>
+<div class="section" id="class-nsibobjectdata">
+<h2><a class="toc-backref" href="#id36" name="class-nsibobjectdata">Class <tt class="literal"><span class="pre">NSIBObjectData</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">restoreFromObjectDataInfo:</span></tt></li>
+<li><tt class="literal"><span class="pre">snapshotIntoObjectDataInfo:</span></tt></li>
+</ul>
+</div>
+<div class="section" id="class-ibobjectcontainer">
+<h2><a class="toc-backref" href="#id37" name="class-ibobjectcontainer">Class <tt class="literal"><span class="pre">IBObjectContainer</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">decodeObjectToIntMapTableForKey:fromCoder:alwaysCreate:</span></tt></li>
+<li><tt class="literal"><span class="pre">decodeObjectToObjectMapTableForKey:fromCoder:alwaysCreate:</span></tt></li>
+</ul>
+</div>
+<div class="section" id="class-ibxmldecoder">
+<h2><a class="toc-backref" href="#id38" name="class-ibxmldecoder">Class <tt class="literal"><span class="pre">IBXMLDecoder</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">allocObjectWithClassName:</span></tt></li>
+</ul>
+</div>
+<div class="section" id="class-ibsplitscrollview">
+<h2><a class="toc-backref" href="#id39" name="class-ibsplitscrollview">Class <tt class="literal"><span class="pre">IBSplitScrollView</span></tt></a></h2>
+<ul class="simple">
+<li><tt class="literal"><span class="pre">getMinimumX:maximumX:</span></tt></li>
+</ul>
+</div>
+</div>
+<div class="section" id="preferencepanes-framework">
+<h1><a class="toc-backref" href="#id40" name="preferencepanes-framework">PreferencePanes framework</a></h1>
+<p>This framework seems to define usefull classes like <tt class="literal"><span class="pre">NSAuthorization</span></tt> and
+<tt class="literal"><span class="pre">NSKeychain</span></tt>, but these are not documented and some usefull methods have
+a hard signature.</p>
+<p>The only documented class, <tt class="literal"><span class="pre">NSPreferencePane</span></tt> is fully supported.</p>
+</div>
+<div class="section" id="screensaver-framework">
+<h1><a class="toc-backref" href="#id41" name="screensaver-framework">ScreenSaver framework</a></h1>
+<div class="section" id="class-screensaverdefaults">
+<h2><a class="toc-backref" href="#id42" name="class-screensaverdefaults">Class <tt class="literal"><span class="pre">ScreenSaverDefaults</span></tt></a></h2>
+<p>This class is fully supported.</p>
+</div>
+<div class="section" id="class-screensaverview">
+<h2><a class="toc-backref" href="#id43" name="class-screensaverview">Class <tt class="literal"><span class="pre">ScreenSaverView</span></tt></a></h2>
+<p>This class is fully supported.</p>
+</div>
+</div>
+</div>
+<?
+    include "footer.inc";
+?>

pyobjc-web/docroot/doc/architecture.php

 <?
     $title = "PyObjC Architecture";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/04 12:56:38 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>

pyobjc-web/docroot/doc/classes.php

 <?
     $title = "Python classes and Objective-C code";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/04 12:56:38 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>
 will return the results back to Objective-C.</p>
 <p>See the section 'Method protocol' for a description of how PyObjC translates 
 between Python and Objective-C method calls.</p>
-<p>Other than being a plain proxy the OC_PythonObject class also provides an
-Objective-C flavored version of the Python C-API.</p>
-<!-- Is anyone actually using the Objective-C version of the Python C-API? -->
-<p>A number of Python types/classes are treated specially:
-- Python numbers are translated into NSNumber instances
-- Python strings and unicode objects are translated into NSString instances
-- Python dictionaries are proxied using OC_PythonDictionary, a subclass of NSMutableDictionary. This allows you to use a Python dictionary everywhere where an NSDictionary is expected.
-- Python lists or tuples are proxied using OC_PythonArray, a subclas of NSMutableArray. This allows you to use a Python list or tuple everywhere where an NSArray is expected.</p>
+<p>A number of Python types/classes are treated specially:</p>
+<ul class="simple">
+<li>Python numbers are translated into NSNumber instances</li>
+<li>Python strings and unicode objects are translated into NSString instances</li>
+<li>Python dictionaries are proxied using OC_PythonDictionary, a subclass of NSMutableDictionary. This allows you to use a Python dictionary everywhere where an NSDictionary is expected.</li>
+<li>Python lists or tuples are proxied using OC_PythonArray, a subclas of NSMutableArray. This allows you to use a Python list or tuple everywhere where an NSArray is expected.</li>
+</ul>
 <p>The special cases allow for more transparent bridging between Python and
 Objective-C.</p>
 </div>

pyobjc-web/docroot/doc/coding-style.php

 <?
     $title = "Coding style for PyObjC";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/07 17:47:05 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>
 <pre class="literal-block">
 # Author: David Goodger
 # Contact: goodger&#64;users.sourceforge.net
-# Revision: $Revision: 1.3 $
-# Date: $Date: 2003/05/07 17:47:05 $
+# Revision: $Revision: 1.4 $
+# Date: $Date: 2003/07/05 14:59:46 $
 # Copyright: This module has been placed in the public domain.
 </pre>
 </li>

pyobjc-web/docroot/doc/developer.php

 <?
 $title = "Developer Documentation";
 $cvs_author = '$Author: ronaldoussoren $';
-$cvs_date = '$Date: 2003/05/04 12:56:38 $';
+$cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
 include "header.inc";
 ?>
 <LI><A HREF="structure.php">Structure of the PyObjC package</A>
 <LI><A HREF="architecture.php">PyObjC Architecture</A>
 <LI><A HREF="classes.php">Python classes and Objective-C code</A>
-<LI><A HREF="libffi.php">Using LibFFI with PyObjC</A>
 <!-- /DEVDOC -->
 </ul>
 

pyobjc-web/docroot/doc/extending_objc_with_python.php

+<?
+    $title = "Tutorial - Adding Python code to an existing ObjC application";
+    $cvs_author = '$Author: ronaldoussoren $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
+
+    include "header.inc";
+?>
+<div class="document" id="tutorial-adding-python-code-to-an-existing-objc-application">
+<h1 class="title">Tutorial - Adding Python code to an existing ObjC application</h1>
+<p>In this tutorial we are going to take an existing ObjC application and
+add Python and PyObjC to it. One of the reasons why you may want to do
+this is because some things are much simpler in Python than in ObjC, mainly
+due to the rich library Python has.</p>
+<p>At the time of this writing this tutorial only works with a framework-based
+python 2.3 (also known as MacPython-2.3), it does not work with Apple's
+<tt class="literal"><span class="pre">/usr/bin/python</span></tt> 2.2. The reason for this is that Apple forgot to ship
+the Python dynamic library, so you cannot embed this Python in your
+application.</p>
+<p>You will also need the Apple Developer Kit, and it is expected you are familiar
+with using Project Builder, Interface Builder and Terminal. MacPython 2.3b2
+or later is expected in the
+standard location (<tt class="literal"><span class="pre">/Library/Frameworks</span></tt>, with auxiliary executables
+in <tt class="literal"><span class="pre">/usr/local/bin</span></tt> and on your <tt class="literal"><span class="pre">$PATH</span></tt>).</p>
+<p>The application we are going to modify is Apple's SimpleComboBox example.
+This example shows you how to use combo boxes, but that is not what interests
+us right now: the application pretends to be a database application that allows
+you to keep notes (such as track list) for your CD collection. With such an
+application it feels silly that even though you want to type notes on
+the CD you are currently playing in iTunes you still have to retype
+album title, artist and genre. This is what we are going to fix: we
+are going to add a button &quot;ask iTunes&quot;, which will use Python's
+AppleScript support to ask iTunes about the currently playing track
+and fill in the fields for you.</p>
+<p>Follow these steps:</p>
+<ol class="arabic">
+<li><p class="first">Make a copy of <tt class="literal"><span class="pre">/Developer/Examples/AppKit/SimpleComboBox</span></tt> to work on.
+Let's call this <tt class="literal"><span class="pre">SimpleComboBoxPlus</span></tt>:</p>
+<pre class="literal-block">
+% cp -R /Developer/Examples/AppKit/SimpleComboBox SimpleComboBoxPlus
+</pre>
+</li>
+<li><p class="first">Open it in Project Builder, build it, and see what it does.</p>
+</li>
+<li><p class="first">Copy <tt class="literal"><span class="pre">PythonGlue.h</span></tt>, <tt class="literal"><span class="pre">PythonGlue.m</span></tt> and <tt class="literal"><span class="pre">PythonGlue.py</span></tt> from <tt class="literal"><span class="pre">src</span></tt>
+into the <tt class="literal"><span class="pre">SimpleComboBoxPlus</span></tt> folder:</p>
+<pre class="literal-block">
+% cp -R src/PythonGlue.* SimpleComboBoxPlus
+</pre>
+</li>
+<li><p class="first">Add <tt class="literal"><span class="pre">PythonGlue.h</span></tt> and <tt class="literal"><span class="pre">PythonGlue.m</span></tt> to the &quot;Classes&quot; group.</p>
+<p>These files contain a class <tt class="literal"><span class="pre">PythonGlue</span></tt> that does nothing
+visibly useful, but it has interesting side effects: when the first
+class instance is initialized it will initialize the Python interpreter,
+add the Resource folder of your application to the Python search path
+and import any modules from that Resources folder. The first bit of
+this is done by the ObjC code, the latter two by the Python code
+in <tt class="literal"><span class="pre">PythonGlue.py</span></tt>.</p>
+</li>
+<li><p class="first">Add <tt class="literal"><span class="pre">PythonGlue.py</span></tt> to the &quot;Resources&quot; group.</p>
+</li>
+<li><p class="first">Select the &quot;Frameworks&quot; group, &quot;Add Framework...&quot;, 
+select <tt class="literal"><span class="pre">/Library/Frameworks/Python.framework</span></tt>.</p>
+</li>
+<li><p class="first">Now we need to arrange to have a <tt class="literal"><span class="pre">PythonGlue</span></tt> object be instantiated
+being called early during startup. A good place to do this for the
+current application is when <tt class="literal"><span class="pre">MainMenu.nib</span></tt> is loaded, as it does not
+contain any Python dependencies itself.</p>
+<p>Open the MainMenu.nib in Interface Builder and define a subclas of 
+<tt class="literal"><span class="pre">NSObject</span></tt> and call the new class PythonGlue. Instantiate it. Use this 
+instance as the application delegate for the File Owner.</p>
+<blockquote>
+<p>Jack: I think this method will not work if you want to use Python-based
+classes in your main NIB file. Suggestions for how to make sure
+a PythonGlue object is instantiated before our main NIB file is read are
+hereby requested.</p>
+<p>Ronald: You might add <tt class="literal"><span class="pre">[[PythonGlue</span> <span class="pre">alloc]</span> <span class="pre">init]</span></tt> to <tt class="literal"><span class="pre">main.m</span></tt>, 
+before the call to <tt class="literal"><span class="pre">NSApplicationMain</span></tt>. You'd also have to create an 
+autorelease pool before creating the <tt class="literal"><span class="pre">PythonGlue</span></tt> instance.</p>
+</blockquote>
+</li>
+<li><p class="first">Now compile, build and run. You will get a message printed to
+standard output (&quot;PythonGlue: Warning: no Python modules found&quot;)
+but all else should be well.</p>
+</li>
+<li><p class="first">Open <tt class="literal"><span class="pre">CDInfoDocument.nib</span></tt>. Select the Class View, <tt class="literal"><span class="pre">NSObject</span></tt>, subclass
+as <tt class="literal"><span class="pre">ITunesCommunication</span></tt>. Give the class an <tt class="literal"><span class="pre">askITunes:</span></tt> action.
+Instantiate the class as object <tt class="literal"><span class="pre">ITunesCommunication</span></tt>.</p>
+</li>
+<li><p class="first">Go to the object view again, open the Window.</p>
+</li>
+<li><p class="first">Move the text box down a bit to make space, add a button &quot;ask iTunes&quot;.</p>
+</li>
+<li><p class="first">Connect this button to the <tt class="literal"><span class="pre">askITunes:</span></tt> action of the <tt class="literal"><span class="pre">ITunesCommunication</span></tt>
+object.</p>
+</li>
+<li><p class="first">We now need to write the code implementing the <tt class="literal"><span class="pre">ITunesCommunication</span></tt> class.
+Create a file <tt class="literal"><span class="pre">ITunesCommunication.py</span></tt> in the Resources group. As this tutorial
+is about using PyObjC in existing ObjC programs and not about PyObjC itself
+we are going to skip the code itself and simply copy it from <tt class="literal"><span class="pre">src/ITunesCommunication_1.py</span></tt>.
+Note that this is not the final code yet, it is a debug version that does not
+yet talk to iTunes.</p>
+<blockquote>
+<p>Double-clicking on <tt class="literal"><span class="pre">ITunesCommunication.py</span></tt> in Project Builder may cause
+it to try and run the code in stead of editing it. In this case bring up the
+contextual menu and select &quot;Open As...&quot;-&gt;&quot;Plain Text File&quot;.</p>
+</blockquote>
+</li>
+<li><p class="first">Build and run. When you press the &quot;Ask iTunes&quot; the &quot;CD Title&quot; and &quot;Band Name&quot;
+fields will be filled with one of the best albums of the last few years:-)</p>
+</li>
+<li><p class="first">Now we need to make the program talk to iTunes. The MacPython implementation
+to the Open Scripting Architecture requires an extra step when compared to
+AppleScript: you need to manually generate a Python package that wraps all the
+AppleScript terminology for an application. To make matters more complicated
+iTunes is one of those special cases where the standard way to generate this
+package (start the application, ask it for its terminology) does not work,
+so we have to actually look into the bowels of <tt class="literal"><span class="pre">iTunes.app</span></tt>. This leads to
+the following hefty command line which you should run in the
+<tt class="literal"><span class="pre">SimpleComboBoxPlus</span></tt> directory:</p>
+<pre class="literal-block">
+% cd SimpleComboBoxPlus
+% setenv FWPYTHON /Library/Frameworks/Python.framework/Versions/Current
+% pythonw $FWPYTHON/lib/python2.3/plat-mac/gensuitemodule.py \
+        --output iTunes --resource --creator hook \
+        /Applications/iTunes.app/Contents/Resources/iTunes.rsrc
+</pre>
+<p>This assumes MacPython is installed in the standard place and <tt class="literal"><span class="pre">pythonw</span></tt>
+is on your $PATH.</p>
+</li>
+<li><p class="first">Add the generated <tt class="literal"><span class="pre">iTunes</span></tt> package to your project: select the &quot;Resources&quot;,
+and add <tt class="literal"><span class="pre">iTunes</span></tt>. Add it as a folder reference, not as a recursive group.</p>
+</li>
+<li><p class="first">Finally, add the code to <tt class="literal"><span class="pre">ITunesCommunication.py</span></tt> to actually communicate
+with iTunes. We cop out and copy it from <tt class="literal"><span class="pre">src/ITunesCommunication_2.py</span></tt>.</p>
+</li>
+<li><p class="first">Build and run. If you press the button when iTunes is playing the Title and
+Band names will be filled, otherwise they will be cleared. In a real application
+you would probably put up a dialog in this case. Actually, in a real application
+you would disable the &quot;Ask iTunes&quot; button unless iTunes was active. All that
+is left as an exercise to the reader.</p>
+</li>
+</ol>
+</div>
+<?
+    include "footer.inc";
+?>

pyobjc-web/docroot/doc/index.php

 <?
 $title = "Documentation";
 $cvs_author = '$Author: ronaldoussoren $';
-$cvs_date = '$Date: 2003/05/04 12:56:38 $';
+$cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
 include "header.inc";
 ?>
 <h1>PyObjC Documentation</h1>
 
 <p>
-Some usefull documentation would be nice. The documents in this section are
-work in progress and based on the CVS version of PyObjC. There are some 
-differences in the semantics and interface w.r.t. PyObjC 0.8.
+The documentation for the PyObjC project is incomplete and one of our major
+items on the TODO list for PyObjC 1.0. The documents mentioned on this page
+should be enough to get you going.
 </p>
 
 <h2>User Documentation</h2>
 <LI><A HREF="intro.php">An introduction to PyObjC</A>
 <LI><A HREF="users.php">Userguide for PyObjC</A>
 <LI><A HREF="tutorial.php">Creating your first PyObjC application.</A>
+<LI><A HREF="extending_objc_with_python.php">Tutorial - Adding Python code to an existing ObjC application</A>
+<LI><A HREF="tutorial_reading.php">Understanding existing PyObjC examples</A>
 <LI><A HREF="projectbuilder-syntaxhighlighting.php">Project Builder Python Support</A>
+<LI><A HREF="api-notes-macosx.php">Notes on supported APIs and classes on MacOS X</A>
 <LI><A HREF="warts.php">Odd features</A>
 <LI><A HREF="wrapping.php">How to wrap an Objective-C class library</A>
 <!-- /USERDOC -->
 <LI><A HREF="structure.php">Structure of the PyObjC package</A>
 <LI><A HREF="architecture.php">PyObjC Architecture</A>
 <LI><A HREF="classes.php">Python classes and Objective-C code</A>
-<LI><A HREF="libffi.php">Using LibFFI with PyObjC</A>
 <!-- /DEVDOC -->
 </ul>
 

pyobjc-web/docroot/doc/install.php

 <?
     $title = "Installation Instructions";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/04 12:56:38 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>
 </div>
 <div class="section" id="examples">
 <h1><a name="examples">Examples</a></h1>
-<p>The examples directory contains a number of projects that demonstrate
+<p>The <a class="reference" href="Examples/00ReadMe.html">examples directory</a> contains a number of projects that demonstrate
 various features of the PyObjC bridge. The scripts at the top level of
-the examples directory were mostly written to test a particular
+the <a class="reference" href="Examples/00ReadMe.html">examples directory</a> were mostly written to test a particular
 feature of the bridge (or document a bug until a fix could be found).</p>
 <p>CurrencyConverter and TableModel are both examples of standalone
 Cocoa-Python applications.  To build and execute:</p>
 % cd TableModel
 % python buildapp.py build
 </pre>
-<p>The WebServicesTool and TableModel2 are both examples of Cocoa-Python
-applications created via the Cocoa-Python project template found in
-the <tt class="literal"><span class="pre">Project</span> <span class="pre">Templates</span></tt> directory.  Use Project Builder to build the
-applications.</p>
+<p>The WebServicesTool is an example of Cocoa-Python applications created via 
+the Cocoa-Python project template found in the 
+<tt class="literal"><span class="pre">ProjectBuilder</span> <span class="pre">Extras/Project</span> <span class="pre">Templates</span></tt> directory.  Use Project Builder 
+to build the applications.</p>
 </div>
 <div class="section" id="project-templates">
 <h1><a name="project-templates">Project Templates</a></h1>
+<p>The <tt class="literal"><span class="pre">ProjectBuilder</span> <span class="pre">Extras</span></tt> directory contains additional files that can
+be used with Project Builder. The directory <tt class="literal"><span class="pre">Specifications</span></tt> contains files
+that enable syntax coloring for Python files in Project Builder.</p>
 <p>The <tt class="literal"><span class="pre">Project</span> <span class="pre">Templates</span></tt> directory contains project templates for
-project builder.  These have to be copied to
+Project Builder.  These have to be copied to
 <tt class="literal"><span class="pre">/Developer/ProjectBuilder</span> <span class="pre">Extras/Project</span> <span class="pre">Templates/Application</span></tt> before
 they are useable from Project Builder.</p>
 <p>There are three templates available:</p>

pyobjc-web/docroot/doc/intro.php

 <?
     $title = "An introduction to PyObjC";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/04 12:56:38 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>
 <div class="contents topic" id="contents">
 <p class="topic-title"><a name="contents">Contents</a></p>
 <ul class="simple">
-<li><a class="reference" href="#work-in-progress" id="id1" name="id1">WORK IN PROGRESS</a></li>
-<li><a class="reference" href="#preface" id="id2" name="id2">Preface</a></li>
-<li><a class="reference" href="#objective-c-for-pyobjc-users" id="id3" name="id3">Objective-C for PyObjC users</a></li>
-<li><a class="reference" href="#overview-of-the-bridge" id="id4" name="id4">Overview of the bridge</a></li>
-<li><a class="reference" href="#cocoa-for-python-programmers" id="id5" name="id5">Cocoa for Python programmers</a></li>
-<li><a class="reference" href="#building-applications" id="id6" name="id6">Building applications</a><ul>
-<li><a class="reference" href="#pure-python-buildapp-py" id="id7" name="id7">&quot;Pure python&quot; :  buildapp.py</a></li>
-<li><a class="reference" href="#ide-approach-project-builder" id="id8" name="id8">&quot;IDE approach&quot; : Project builder</a></li>
+<li><a class="reference" href="#work-in-progress" id="id2" name="id2">WORK IN PROGRESS</a></li>
+<li><a class="reference" href="#preface" id="id3" name="id3">Preface</a></li>
+<li><a class="reference" href="#objective-c-for-pyobjc-users" id="id4" name="id4">Objective-C for PyObjC users</a></li>
+<li><a class="reference" href="#overview-of-the-bridge" id="id5" name="id5">Overview of the bridge</a></li>
+<li><a class="reference" href="#cocoa-for-python-programmers" id="id6" name="id6">Cocoa for Python programmers</a></li>
+<li><a class="reference" href="#building-applications" id="id7" name="id7">Building applications</a><ul>
+<li><a class="reference" href="#pure-python-buildapp-py" id="id8" name="id8">&quot;Pure Python&quot; :  buildapp.py</a></li>
+<li><a class="reference" href="#ide-approach-project-builder" id="id9" name="id9">&quot;IDE approach&quot; : Project builder</a></li>
 </ul>
 </li>
 </ul>
 </div>
 <div class="section" id="work-in-progress">
-<h1><a class="toc-backref" href="#id1" name="work-in-progress">WORK IN PROGRESS</a></h1>
+<h1><a class="toc-backref" href="#id2" name="work-in-progress">WORK IN PROGRESS</a></h1>
 <p>This document is work in progress and thin on details.</p>
 </div>
 <div class="section" id="preface">
-<h1><a class="toc-backref" href="#id2" name="preface">Preface</a></h1>
+<h1><a class="toc-backref" href="#id3" name="preface">Preface</a></h1>
 <p>PyObjC is a bridge between Python and Objective-C. It allows you to write 
-Python scripts that reuse and extend existing Objective-C class libraries, 
-most importantly the <a class="reference" href="http://developer.apple.com/techpubs/macosx/Cocoa/CocoaTopics.html">Cocoa library</a> by <a class="reference" href="http://www.apple.com/">Apple</a>.</p>
+Python scripts that use and extend existing Objective-C class libraries, 
+most importantly the <a class="reference" href="http://developer.apple.com/techpubs/macosx/Cocoa/CocoaTopics.html">Cocoa libraries</a> by <a class="reference" href="http://www.apple.com/">Apple</a>.</p>
 <p>This document describes how to use Objective-C class libraries from Python
 scripts and how to interpret the documentation of those libraries, from the 
 point of view of a Python programmer.</p>
 </div>
 <div class="section" id="objective-c-for-pyobjc-users">
-<h1><a class="toc-backref" href="#id3" name="objective-c-for-pyobjc-users">Objective-C for PyObjC users</a></h1>
-<p>Objective-C is an object-oriented programming language that is an extention 
+<h1><a class="toc-backref" href="#id4" name="objective-c-for-pyobjc-users">Objective-C for PyObjC users</a></h1>
+<p>Objective-C is an object-oriented programming language that is an extension 
 of C and borrows heavily from Smalltalk. It features single inheritance with
 (in theory) multiple root classes and dynamic dispatch of methods. This is
-basicly the same as python with single inheritance.</p>
+basicly the same as Python with single inheritance.</p>
 <p>An important difference between Python and Objective-C is that the latter is
 not a pure object-oriented language. Some values are not objects, but values
 of plain C types, such as <tt class="literal"><span class="pre">int</span></tt> and <tt class="literal"><span class="pre">double</span></tt>. These basic C types can also
 </ul>
 </div>
 <div class="section" id="overview-of-the-bridge">
-<h1><a class="toc-backref" href="#id4" name="overview-of-the-bridge">Overview of the bridge</a></h1>
+<h1><a class="toc-backref" href="#id5" name="overview-of-the-bridge">Overview of the bridge</a></h1>
 <p>Objective-C classes are visible as Python classes and can be subclassed just
 like normal Python classes. The major differences between normal Python classes
 and Objective-C classes are the way you create instances and the fact that 
-Objective-C classes have <em>odd</em> names.</p>
+Objective-C classes have odd names.</p>
 <p>As described in <a class="reference" href="#objective-c-for-pyobjc-users">Objective-C for PyObjC users</a> the creation of Objective-C 
 objects is a two-stage process. You first call the class method <tt class="literal"><span class="pre">alloc</span></tt>, and
 then call some variation of <tt class="literal"><span class="pre">init</span></tt> to initialize the objects. The newly
 created object is the result of the call to <tt class="literal"><span class="pre">init</span></tt>. Most classes have 
 convienence class methods that combine the calls to <tt class="literal"><span class="pre">alloc</span></tt> and <tt class="literal"><span class="pre">init</span></tt>.</p>
-<p>Objective-C methods are bridged to python callables. Because Objective-C method 
+<p>Objective-C methods are bridged to Python callables. Because Objective-C method 
 names can contain colons it is necessary to translate methods names. The rules
 for translation are:</p>
 <ul class="simple">
 the bridged method has has an integer argument).  Data that is passed from the
 function results in additional return values from the function.</p>
 <p>When the bridge cannot automaticly deduce the right signature for a method, or
-if you want to add a method whose name cannot be transformed into python (
+if you want to add a method whose name cannot be transformed into Python (
 for example a methodname containing <tt class="literal"><span class="pre">$</span></tt>), you'll have to add explicit hints
 to your code. You do this by calling the function <tt class="literal"><span class="pre">objc.selector</span></tt> and using
 the result instead of your method definition:</p>
 additional information about the method to the bridge, see the online 
 documentation for more information about this function. It is almost never
 necessary to use this technique.</p>
-<p>The need for additional hints to the bridge often arises from implementing an
-(informal) protocol in Python. Because the methods compromising the protocol
-are probably not implemented in the superclass the bridge often cannot deduce 
-the correct method signatures for the methods you implemented. To avoid the
-need for using <tt class="literal"><span class="pre">objc.selector</span></tt> and to make it explicit that your implementing
-an (informal) protocol the bridge has explicit support for these (informal)
-protocols.</p>
-<p>To tell the bridge that your implementing an informal protocol you use an
-<tt class="literal"><span class="pre">informal_protocol</span></tt> object as a mixin:</p>
-<pre class="literal-block">
-class MyModel (NSObject, anInformalProtocol):
-        pass
-</pre>
-<p>The <tt class="literal"><span class="pre">AppKit</span></tt> and <tt class="literal"><span class="pre">Foundation</span></tt> modules define <tt class="literal"><span class="pre">informal_protocol</span></tt> objects 
-for most (informal) protocols and defined by these frameworks (both the 
-explicitly documented protocols and the protocols used to communicate between
-an object and its delegate).</p>
+<p>If you write a method for an Objecitve-C class in Python, PyObjC will try to
+deduce the method's signature. If it's overriding a method, the signature of
+the method that is overridden is taken. If it's a method that appears
+<em>anywhere</em> in an informal protocol definition in a framework that's currently
+loaded, PyObjC takes the signature from there. (Most wrapped frameworks have a
+submodule named <tt class="literal"><span class="pre">protocols.py</span></tt> that contains informal protocol definitions.)</p>
 </div>
 <div class="section" id="cocoa-for-python-programmers">
-<h1><a class="toc-backref" href="#id5" name="cocoa-for-python-programmers">Cocoa for Python programmers</a></h1>
+<h1><a class="toc-backref" href="#id6" name="cocoa-for-python-programmers">Cocoa for Python programmers</a></h1>
 <p>Cocoa frameworks are mapped onto Python packages with the same name, that is
 the classes, constants and functioins from the AppKit framework are available
 after you import <tt class="literal"><span class="pre">AppKit</span></tt> in your Python script.</p>
 </ul>
 </div>
 <div class="section" id="building-applications">
-<h1><a class="toc-backref" href="#id6" name="building-applications">Building applications</a></h1>
+<h1><a class="toc-backref" href="#id7" name="building-applications">Building applications</a></h1>
 <p>There are two different ways to build applications with PyObjC. There are no
 major advantages to using either one of them, use the one that is most 
 convenient to you.</p>
 <div class="section" id="pure-python-buildapp-py">
-<h2><a class="toc-backref" href="#id7" name="pure-python-buildapp-py">&quot;Pure python&quot; :  buildapp.py</a></h2>
-<p>PyObjC includes a copy of the <tt class="literal"><span class="pre">bundlebuilder</span></tt> module. This module will be part
-of the Python 2.3 MacPython release and is a to build distutil-style scripts 
-for building (standalone) applications.</p>
+<h2><a class="toc-backref" href="#id8" name="pure-python-buildapp-py">&quot;Pure Python&quot; :  buildapp.py</a></h2>
+<p>PyObjC includes a copy of the <tt class="literal"><span class="pre">bundlebuilder</span></tt> module. This module will be
+part of the Python 2.3 MacPython release and offers a way to build
+distutils-style scripts  for building (standalone) applications.</p>
 <p>An example <tt class="literal"><span class="pre">buildapp.py</span></tt> script:</p>
 <pre class="literal-block">
 from bundlebuilder import buildapp
         nibname = &quot;MainMenu&quot;,
 )   
 </pre>
+<p>During development you typically invoke it from the command line like this:</p>
+<pre class="literal-block">
+python buildapp.py --link build
+</pre>
+<p>This will build an application bundle in a folder named <tt class="literal"><span class="pre">build</span></tt> in the
+current folder. The <tt class="literal"><span class="pre">--link</span></tt> option tells <tt class="literal"><span class="pre">bundlebuilder</span></tt> to add symbolic
+links to the application bundle instead of copies of your source and resource
+files, allowing you to edit them without having to rebuild the application. To
+build a standalone application, either use <tt class="literal"><span class="pre">--standalone</span></tt> or
+<tt class="literal"><span class="pre">--semi-standalone</span></tt>. The latter will put all used modules that are not in
+Python's standard library into the application bundle. The result will still
+depend on an installed Python, but yields a relatively compact application.
+<tt class="literal"><span class="pre">--standalone</span></tt> will cause <tt class="literal"><span class="pre">bundlebuilder</span></tt> to include <em>everything</em> needed
+into the app bundle, including the entire Python runtime. This is useful if
+you're using a different version of Python that the one that comes with MacOSX
+10.2, or if you fear that a future version of OSX may come with an
+incompatible Python version.</p>
 <p>The online documentation for <tt class="literal"><span class="pre">bundlebuilder</span></tt> contains more information on 
-building <tt class="literal"><span class="pre">buildapp.py</span></tt> scripts.</p>
+building <tt class="literal"><span class="pre">buildapp.py</span></tt> scripts and how to invoke them. There are plenty of
+example <tt class="literal"><span class="pre">buildapp.py</span></tt> scripts in the various <a class="reference" href="../Examples">Examples</a> subfolders.</p>
 </div>
 <div class="section" id="ide-approach-project-builder">
-<h2><a class="toc-backref" href="#id8" name="ide-approach-project-builder">&quot;IDE approach&quot; : Project builder</a></h2>
+<h2><a class="toc-backref" href="#id9" name="ide-approach-project-builder">&quot;IDE approach&quot; : Project builder</a></h2>
 <p>PyObjC includes a number of Project Builder templates that can be used to 
 build (standalone) applications.</p>
 <p><strong>TODO</strong>:</p>

pyobjc-web/docroot/doc/projectbuilder-syntaxhighlighting.php

 <?
     $title = "Project Builder Python Support";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/04 12:56:38 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>
Add a comment to this file

pyobjc-web/docroot/doc/step3-MainMenu.nib.zip

Binary file modified.

pyobjc-web/docroot/doc/structure.php

 <?
     $title = "Structure of the PyObjC package";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/04 12:56:38 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>
 <h1><a name="introduction">Introduction</a></h1>
 <p>This document gives an overview of the PyObjC for developers (of the package).</p>
 <p>One of the sections describes how all of it works, and some of the limitation.</p>
+<p>This document is a little dated, it should be updated.</p>
 </div>
 <div class="section" id="methods">
 <h1><a name="methods">Methods</a></h1>

pyobjc-web/docroot/doc/tutorial.php

 <?
     $title = "Creating your first PyObjC application.";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/05/07 17:47:06 $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
 
     include "header.inc";
 ?>
 <pre class="literal-block">
 object.modifyArg_andAnother_(arg1, arg2)
 </pre>
-<p>Note that we don't do this mangling for <tt class="literal"><span class="pre">Converter.ConvertAmount()</span></tt>: this method is
+<p>Note that we don't do this mangling for <tt class="literal"><span class="pre">Converter.convertAmount()</span></tt>: this method is
 only called by other Python code, so there is no need to go through the name mangling.
 Also, if we would want to make this method callable from ObjC code we would have
 to tell the PyObjC runtime system about the types of the arguments, so it could

pyobjc-web/docroot/doc/tutorial_reading.php

+<?
+    $title = "Understanding existing PyObjC examples";
+    $cvs_author = '$Author: ronaldoussoren $';
+    $cvs_date = '$Date: 2003/07/05 14:59:46 $';
+
+    include "header.inc";
+?>
+<div class="document" id="understanding-existing-pyobjc-examples">
+<h1 class="title">Understanding existing PyObjC examples</h1>
+<div class="section" id="introduction">
+<h1><a name="introduction">Introduction</a></h1>
+<p>This tutorial is aimed primarily at people with little or no background
+in ObjC and Cocoa, and it will help you to understand PyObjC programs
+written by other people, such as the examples included with the distribution.
+This document is actually not a true tutorial: you do not get to build anything,
+only read and examine things.</p>
+<p>It is strongly suggested that you first do the