Commits

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

  • Participants
  • Parent commits 3fd230c

Comments (0)

Files changed (29)

File 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
+

File 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
+

File 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
-

File 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";
+?>

File 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";
 ?>

File 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>

File 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>

File 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>
 

File 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";
+?>

File 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>
 

File 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>

File 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>