Commits

Ronald Oussoren committed a9384d3

Prepare for the 1.1a0 release:
- Recreate the PyObjC documentation PHP
- Update the news file
- Add an 'unstable' packman database

Also: add some more historic information (there really was an ObjC interface
in the Python core once: python 1.3).

  • Participants
  • Parent commits b82dd44

Comments (0)

Files changed (25)

File pyobjc-web/docroot/NEWS-1.1.txt

+===========
+PyObjC NEWS
+===========
+
+An overview of the relevant changes in new, and older, releases.
+
+Version "1.1a0" (2004-02-02)
+----------------------------
+- Objective-C structs can now be wrapped using struct-like types. This has
+  been used to implement wrapper types for NSPoint, NSSize, NSRange and NSRect
+  in Foundation and NSAffineTransformStruct in AppKit.
+
+  This means you can now access the x-coordinate of a point as ``aPoint.x``,
+  accessing ``aPoint[0]`` is still supported for compatibility with older 
+  versions of PyObjC.
+
+  It is still allowed to use tuples, or other sequences, to represent 
+  Objective-C structs.
+  
+  NOTE: This has two side-effects that may require changes in your programs:
+  the values of the types mentioned above are no longer immutable and cannot
+  be used as keys in dicts or elements in sets. Another side-effect is that
+  a pickle containing these values created using this version of PyObjC cannot
+  be unpickled on older versions of PyObjC.
+
+- This version adds support for NSDecimal. This is a fixed-point type defined
+  in Cocoa. 
+
+- NSDecimalNumbers are no longer converted to floats, that would loose 
+  information.
+
+- If an Objective-C method name is a Python keyword you can now access it
+  by appending two underscores to its name, e.g. someObject.class__().
+
+  The same is true for defining methods, if you define a method 'raise__' in a 
+  subclass of NSObject it will registered with the runtime as 'raise'.
+
+  NOTE: Currently only 'class' and 'raise' are treated like this, because
+  those are the only Python keywords that are actually used as Objective-C
+  method names.
+
+- Experimental support for instanceMethodForSelector: and methodForSelector:. 
+  This support is not 100% stable, and might change in the future.
+
+- Backward incompatible change: class methods are no longer callable through
+  the instances.
+
+- Integrates full support for MacOS X 10.3 (aka Panther)
+
+- Adds a convenience/wrapper module for SecurityInterface
+
+- It is now safe to call from Objective-C to Python in arbitrary threads, but
+  only when using Python 2.3 or later.
+
+- Fixes some issues with passing structs between Python and Objective-C. 
+
+- Uses the Panther version of ``NSKeyValueCoding``, the Jaguar version is still
+  supported.
+
+- method ``updateNSString`` of ``objc.pyobjc_unicode`` is deprecated, use 
+  create a new unicode object using ``unicode(mutableStringInstance)`` instead.
+
+- NSAppleEventDescriptor bridged to Carbon.AE
+
+- LibFFI is used more aggressivly, this should have no user-visible effects
+  other than fixing a bug related to key-value observing.
+
+
+- Adds a number of new Examples:
+  
+  * OpenGLDemo
+   
+    Shows how to use OpenGL with PyObjC
+
+  * SillyBallsSaver
+
+    Shows how to write a screensaver in Python. Requires a framework install
+    of Python (that is, MacOS X 10.3 or MacPython 2.3 on MacOS X 10.2).
+  
+  * Twisted/WebServicesTool
+
+    Shows how to integrate Twisted (1.1 or later) with Cocoa, it is a
+    refactor of the WebServicesTool example that is made much simpler
+    by using Twisted.
+
+  * Twisted/WebServicesTool-ControllerLayer
+
+    Shows how to integrate Twisted (1.1 or later) with Cocoa, it is a
+    refactor of the WebServicesTool example that is made much simpler
+    by using Twisted as it does not need threads. This one also uses
+    NSController and therefore requires MacOS X 10.3.
+
+Version 1.0 (2003-09-21)
+------------------------
+
+- This version includes a new version of libffi that properly deals with
+  complex types on MacOS X.
+
+Version 1.0rc3 (2003-09-14)
+---------------------------
+
+- 1.0rc2 didn't include the nibclassbuilder script
+
+- Fix bug in NSRectFillList
+
+Version 1.0rc2 (2003-09-10)
+---------------------------
+
+- Fix a number of bugs found in 1.0rc1.
+
+Version 1.0rc1 (2003-08-10)
+---------------------------
+
+- Better support for the NSKeyValueCoding protocol.  The module 
+  ``PyObjCTools.KeyValueCoding`` provides a python interface that makes it
+  possible to use key-value coding with python objects as well as 
+  Objective-C objects. Key-Value Coding also works as one would expect with
+  Python objects when accessing them from Objective-C (both for plain Python
+  objects and Python/Objective-C hybrid objects).
+
+- objc.pyobjc_unicode objects are now pickled as unicode objects, previously
+  the couldn't be pickled or were pickled as incomplete objects (protocol 
+  version 2). 
+
+- Pickling of ObjC objects never worked, we now explicitly throw an exception
+  if you try to pickle one: pickle protocol version 2 silently wrote the 
+  incomplete state of objects to the pickle.
+
+- The default repr() of ObjC objects is now the result of a call to the
+  ``description`` method. This method is not called for unitialized objects,
+  because that might crash the interpreter; we use a default implementation
+  in that case.
+
+- A minor change to the conversion rule for methods with output arguments
+  (pointers to values in ObjC, where the method will write through the pointer).
+  If the method has 'void' as its return type, we used to return a tuple where
+  the first value is always None. This first element is no longer included,
+  furthermore if the method has only 1 output argument we no longer return
+  a tuple but return the output value directly (again only if the method has
+  'void' as its return type).
+  
+  This is a backward incompatible change, but there are not many of such
+  methods.
+
+- Another backward incompatible change is a minor cleanup of the names in
+  the ``objc`` module. The most significant of these is the change from
+  ``recycle_autorelease_pool`` to ``recycleAutoreleasePool``. The other 
+  changed names are internal to the bridge and should not be used in other
+  code.
+
+- The interface of Foundation.NSFillRects changed, it now has an interface
+  that is consistent with the rest of the bridge.
+
+Version 1.0b1 (2003-07-05)
+--------------------------
+
+- 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 dynamically 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/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>
 <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>
+<li><a class="reference" href="#class-nsdecimalnumber-and-the-nsdecimal-type" id="id26" name="id26">Class <tt class="literal"><span class="pre">NSDecimalNumber</span></tt> and the <tt class="literal"><span class="pre">NSDecimal</span></tt> type</a></li>
+<li><a class="reference" href="#class-nsdictionary" id="id27" name="id27">Class <tt class="literal"><span class="pre">NSDictionary</span></tt></a></li>
+<li><a class="reference" href="#class-nsfault" id="id28" name="id28">Class <tt class="literal"><span class="pre">NSFault</span></tt></a></li>
+<li><a class="reference" href="#class-nsindexset" id="id29" name="id29">Class <tt class="literal"><span class="pre">NSIndexSet</span></tt></a></li>
+<li><a class="reference" href="#class-nsinvocation" id="id30" name="id30">Class <tt class="literal"><span class="pre">NSInvocation</span></tt></a></li>
+<li><a class="reference" href="#class-nsmutablearray" id="id31" name="id31">Class <tt class="literal"><span class="pre">NSMutableArray</span></tt></a></li>
+<li><a class="reference" href="#class-nsnetservice" id="id32" name="id32">Class <tt class="literal"><span class="pre">NSNetService</span></tt></a></li>
+<li><a class="reference" href="#class-nsobject" id="id33" name="id33">Class <tt class="literal"><span class="pre">NSObject</span></tt></a></li>
+<li><a class="reference" href="#class-nsscriptobjectspecifier" id="id34" name="id34">Class <tt class="literal"><span class="pre">NSScriptObjectSpecifier</span></tt></a></li>
+<li><a class="reference" href="#class-nsset" id="id35" name="id35">Class <tt class="literal"><span class="pre">NSSet</span></tt></a></li>
+<li><a class="reference" href="#class-nsstring" id="id36" name="id36">Class <tt class="literal"><span class="pre">NSString</span></tt></a></li>
+<li><a class="reference" href="#class-nsthread" id="id37" name="id37">class <tt class="literal"><span class="pre">NSThread</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>
+<li><a class="reference" href="#interfacebuilder-framework" id="id38" name="id38">InterfaceBuilder framework</a><ul>
+<li><a class="reference" href="#class-ibobjcsourceparser" id="id39" name="id39">Class <tt class="literal"><span class="pre">IBObjCSourceParser</span></tt></a></li>
+<li><a class="reference" href="#id1" id="id40" name="id40">Class <tt class="literal"><span class="pre">NSView</span></tt></a></li>
+<li><a class="reference" href="#class-nsibobjectdata" id="id41" name="id41">Class <tt class="literal"><span class="pre">NSIBObjectData</span></tt></a></li>
+<li><a class="reference" href="#class-ibobjectcontainer" id="id42" name="id42">Class <tt class="literal"><span class="pre">IBObjectContainer</span></tt></a></li>
+<li><a class="reference" href="#class-ibxmldecoder" id="id43" name="id43">Class <tt class="literal"><span class="pre">IBXMLDecoder</span></tt></a></li>
+<li><a class="reference" href="#class-ibsplitscrollview" id="id44" name="id44">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>
+<li><a class="reference" href="#preferencepanes-framework" id="id45" name="id45">PreferencePanes framework</a></li>
+<li><a class="reference" href="#screensaver-framework" id="id46" name="id46">ScreenSaver framework</a><ul>
+<li><a class="reference" href="#class-screensaverdefaults" id="id47" name="id47">Class <tt class="literal"><span class="pre">ScreenSaverDefaults</span></tt></a></li>
+<li><a class="reference" href="#class-screensaverview" id="id48" name="id48">Class <tt class="literal"><span class="pre">ScreenSaverView</span></tt></a></li>
 </ul>
 </li>
 </ul>
 <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>
+<li><p class="first"><tt class="literal"><span class="pre">descriptionForClassMethod:</span></tt>, <tt class="literal"><span class="pre">descriptionForInstanceMethod</span></tt></p>
+<p>These methods are not supported, protocols are hardly ever used explicitly
+in Cocoa therefore this should not be a problem.</p>
+</li>
 </ul>
 </div>
 </div>
 </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
         mysheetDidEnd = PyObjCTools.AppHelper.endSheetMethod(
                 mysheetDidEnd)
 </pre>
+<p>Unless otherwise noted, all <tt class="literal"><span class="pre">contextInfo</span></tt> arguments are passed as integers,
+not as arbitrary pointers.</p>
 <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
 </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>
+<li><p class="first"><tt class="literal"><span class="pre">getLineDash:count:phase:</span></tt></p>
+<p>Use <tt class="literal"><span class="pre">getLineDash_count_phase_(0)</span></tt> to get the length of the pattern, and
+then use <tt class="literal"><span class="pre">getLineDash_count_phase_(actualCount)</span></tt> to fetch all information.
+Both return <tt class="literal"><span class="pre">(pattern,</span> <span class="pre">actualCount,</span> <span class="pre">phase)</span></tt>. The <tt class="literal"><span class="pre">pattern</span></tt> is <tt class="literal"><span class="pre">None</span></tt>
+when the input argument is <tt class="literal"><span class="pre">0</span></tt>.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">appendBezierPathWithGlyphs:count:inFont:</span></tt></p>
+<p>The first argument is a list of integers, count should be at most the lenght
+of the first argument.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">appendBezierPathWithPoints:count:</span></tt></p>
+<p>The first argument is a list of points, count should be at most the lenght
+of the first argument.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">setAssociatedPoints:atIndex:</span></tt></p>
+<p>Implementing this method in Python is not yet supported.</p>
+</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>
+<li><p class="first"><tt class="literal"><span class="pre">getBitMapDataPlanes</span></tt></p>
+<p>This method is not supported (yet)</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getTIFFCompressionTypes:count:</span></tt></p>
+<p>This method is not supported (yet)</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">initWithBitmapDataPlanes:pixesWide:pixelsHigh:bitPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bytesPerRow:bitsPerPixel:</span></tt></p>
+<p>This method is not supported (yet)</p>
+</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>
+<li><p class="first"><tt class="literal"><span class="pre">positionsForCompositeSequence:numberOfGlyphs:pointArray:</span></tt></p>
+<p>This method is not supported (yet)</p>
+</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>
+<li><p class="first"><tt class="literal"><span class="pre">focusStack</span></tt></p>
+<p>This method is not supported.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">setFocusStack</span></tt></p>
+<p>This method is not supported.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">graphicsPort</span></tt></p>
+<p>This method is not yet supported, MacPython doesn't wrap <tt class="literal"><span class="pre">CGContextRef</span></tt>
+at the moment.</p>
+</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>
+<li><p class="first"><tt class="literal"><span class="pre">getGlyphs:range:</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getGlyphsInRange:glyphs:characterIndexes:glyphInscriptions:elasticBits:bidiLevels:</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">rectArrayForCharacterRange:withinSelectedCharacterRange:inTextContainer:rectCount:</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">rectArrayForGlyphRange:withinSelectedGlyphRange:inTextContainer:rectCount:</span></tt></p>
+<p>This method is not yet supported</p>
+</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>
+<li><p class="first"><tt class="literal"><span class="pre">sortUsingFunction:context</span></tt></p>
+<p>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.</p>
+</li>
 </ul>
 </div>
 <div class="section" id="class-nsmovie">
 </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>
+<li><p class="first"><tt class="literal"><span class="pre">getValues:forParameter:</span></tt></p>
+<p>This method is not yet supported.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">setValues:forParameter:</span></tt></p>
+<p>This method is not yet supported.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">setOffScreen:width:height:rowbytes:</span></tt></p>
+<p>This method is not yet supported.</p>
+</li>
 </ul>
 </div>
 <div class="section" id="class-nsopenglpixelformat">
 </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>
+<li><p class="first"><tt class="literal"><span class="pre">baseOfTypesetterGlyphInfo</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">layoutGlyphsInHorizontalLineFragment:baseline:</span></tt></p>
+<p>This method is not yet supported</p>
+</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>
+<li><p class="first"><tt class="literal"><span class="pre">sortSubviewsUsingFunction:context:</span></tt></p>
+<p>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.</p>
+</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>
+<li><p class="first"><tt class="literal"><span class="pre">graphicsPort</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">initWithWindowRef:</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">windowRef</span></tt></p>
+<p>This method is not yet supported</p>
+</li>
 </ul>
 </div>
 </div>
 <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>
+<p>Structs are wrapped using a struct-like type. They can be accessed using the
+field-names from Objective-C, or you can access them as sequences. Accessing
+them as sequences is necessary for backward compatibility and is depericated.</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><p class="first"><tt class="literal"><span class="pre">initWithObjects:</span></tt>, <tt class="literal"><span class="pre">arrayWithObjects:</span></tt></p>
+<p>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
+<li><p class="first"><tt class="literal"><span class="pre">getObjects:</span></tt></p>
+<p>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
+<li><p class="first"><tt class="literal"><span class="pre">getObjects:inRange:</span></tt></p>
+<p>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
+<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></p>
+<p>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>
+<li><p class="first"><tt class="literal"><span class="pre">addObserver:toObjectsAtIndexes:forKeyPath:options:context:</span></tt></p>
+<p>The context is an integer, not a <tt class="literal"><span class="pre">void*</span></tt>.</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
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">bundleForClass:</span></tt></p>
+<p>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>
+Python based bundle. See Examples/PrefPane for an example of its usage.</p>
+</li>
 </ul>
 </div>
 <div class="section" id="class-nscoder">
 <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>
-<li><p class="first"><tt class="literal"><span class="pre">decodeBytesWithReturnedLength:</span></tt></p>
-</li>
-<li><p class="first"><tt class="literal"><span class="pre">decodeBytesForKey:returnedLength:</span></tt></p>
-</li>
 <li><p class="first"><tt class="literal"><span class="pre">encodeValuesOfObjCType:</span></tt></p>
 <p>Use multiple calls to <tt class="literal"><span class="pre">encodeValueOfObjCType:at:</span></tt> instead.</p>
 </li>
 </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>
+<li><p class="first"><tt class="literal"><span class="pre">initWithBytesNoCopy:length:</span></tt></p>
+<p>This method is not supported, use <tt class="literal"><span class="pre">initWithBytes:length:</span></tt> instead.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">initWithBytesNoCopy:length:freeWhenDone:</span></tt></p>
+<p>This method is not supported, use <tt class="literal"><span class="pre">initWithBytes:length:</span></tt> instead.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">dataWithBytesNoCopy:length:</span></tt></p>
+<p>This method is not supported, use <tt class="literal"><span class="pre">dataWithBytes:length:</span></tt> instead.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">dataWithBytesNoCopy:length:freeWhenDone:</span></tt></p>
+<p>This method is not supported, use <tt class="literal"><span class="pre">dataWithBytes:length:</span></tt> instead.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">deserializeAlignedBytesLengthAtCursor:</span></tt></p>
+<p>This is a depricated method, see Apple documentation.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">deserializeBytes:length:atCursor:</span></tt></p>
+<p>This is a depricated method, see Apple documentation.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">deserializeDataAt:ofObjCType:atCursor:context:</span></tt></p>
+<p>This is a depricated method, see Apple documentation.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">deserializeIntAtCursor:</span></tt></p>
+<p>This is a depricated method, see Apple documentation.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">deserializeInts:count:atCursor:</span></tt></p>
+<p>This is a depricated method, see Apple documentation.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">deserializeInts:count:atIndex:</span></tt></p>
+<p>This is a depricated method, see Apple documentation.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getBytes:</span></tt>, <tt class="literal"><span class="pre">getBytes:length:</span></tt>, <tt class="literal"><span class="pre">getBytes:range:</span></tt>
+Use <tt class="literal"><span class="pre">bytes</span></tt> instead, and then use subscripting to get the
+desired range.</p>
+</li>
 </ul>
 </div>
+<div class="section" id="class-nsdecimalnumber-and-the-nsdecimal-type">
+<h2><a class="toc-backref" href="#id26" name="class-nsdecimalnumber-and-the-nsdecimal-type">Class <tt class="literal"><span class="pre">NSDecimalNumber</span></tt> and the <tt class="literal"><span class="pre">NSDecimal</span></tt> type</a></h2>
+<p>NSDecimal is wrapped by a Python type. This type does not (yet) support
+mathematical operators, but does support explicit conversion to and from
+Python numbers.</p>
+<p>Creating an <tt class="literal"><span class="pre">NSDecimal</span></tt> instance: <tt class="literal"><span class="pre">NSDecimal(value)</span></tt> or 
+<tt class="literal"><span class="pre">NSDecimal(mantisssa,</span> <span class="pre">exponent,</span> <span class="pre">isNegative)</span></tt>.  <tt class="literal"><span class="pre">Value</span></tt> can be a string,
+int or long (not a float because of the representation issues for floats).</p>
+<p>Converting an <tt class="literal"><span class="pre">NSDecimal</span></tt> to a float or int: <tt class="literal"><span class="pre">aDecimal.as_int()</span></tt> and
+<tt class="literal"><span class="pre">aDecimal.as_float</span></tt>.</p>
+</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>
+<h2><a class="toc-backref" href="#id27" 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>
+<h2><a class="toc-backref" href="#id28" 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-nsindexset">
+<h2><a class="toc-backref" href="#id29" name="class-nsindexset">Class <tt class="literal"><span class="pre">NSIndexSet</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">getIndexes:maxCount:inIndexRange:</span></tt>
+The usage is:</p>
+<pre class="literal-block">
+(realCount, indices, newRange) = obj.getIndexes_maxCount_inIndexRange(
+        maxCount, inRange)              
+</pre>
+</li>
+</ul>
+</div>
+<div class="section" id="class-nsinvocation">
+<h2><a class="toc-backref" href="#id30" name="class-nsinvocation">Class <tt class="literal"><span class="pre">NSInvocation</span></tt></a></h2>
+<p>In some versions of MacOS X, NSInvocation doesn't work properly with structs
+that contain padding. Such structs are not used in the MacOS X API, but may
+be present in 3th party code. This leads to problems when <tt class="literal"><span class="pre">forwardInvocation:</span></tt>
+is used to call a method that has such a struct as one of its arguments.</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>
+<h2><a class="toc-backref" href="#id31" 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
+<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></p>
+<p>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>
+<h2><a class="toc-backref" href="#id32" name="class-nsnetservice">Class <tt class="literal"><span class="pre">NSNetService</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">addresses</span></tt></p>
+<p>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>.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="class-nsobject">
+<h2><a class="toc-backref" href="#id33" name="class-nsobject">Class <tt class="literal"><span class="pre">NSObject</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">observationInfo</span></tt>, <tt class="literal"><span class="pre">setObservationInfo:</span></tt></p>
+<p>These methods can be used from Python, but the <tt class="literal"><span class="pre">observationInfo</span></tt> is 
+represented by an integer instead of <tt class="literal"><span class="pre">void*</span></tt>. This probably makes it
+impossible to do anything usefull with these methods.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">addObserver:forKeyPath:options:context:</span></tt></p>
+<p>The context is an integer.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">observeValueForKeyPath:ofObject:change:context:</span></tt></p>
+<p>The context is an integer</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">methodForSelector:</span></tt>, <tt class="literal"><span class="pre">instanceMethodForSelector:</span></tt></p>
+<p>These methods return instances of objc.IMP. The major difference with
+Objective-C is that you don't have to, or even can, pass the selector to
+the IMP. In other words, the interface is the same as for unbound
+instance methods: you have to pass <tt class="literal"><span class="pre">self</span></tt> and the method arguments.</p>
+<p>WARNING: This interface is experimental and might change in a future version
+of PyObjC.</p>
+</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
+<h2><a class="toc-backref" href="#id34" name="class-nsscriptobjectspecifier">Class <tt class="literal"><span class="pre">NSScriptObjectSpecifier</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">indicesOfObjectsByEvaluatingWithContainer:count:</span></tt></p>
+<p>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>
+internal datastructure.</p>
+</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>
+<h2><a class="toc-backref" href="#id35" name="class-nsset">Class <tt class="literal"><span class="pre">NSSet</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">initWithObjects:</span></tt>, <tt class="literal"><span class="pre">setWithObjects:</span></tt></p>
+<p>This method is not supported, use <tt class="literal"><span class="pre">initWithArray:</span></tt> instead.</p>
+</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>
+<h2><a class="toc-backref" href="#id36" 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 
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">initWithCharactersNoCopy:length:freeWhenDone:</span></tt></p>
+<p>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.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getCharacters:</span></tt> and <tt class="literal"><span class="pre">getCharacters:range:</span></tt></p>
+<p>These methods are not supported at the moment. This limitation will be liften
+in a future version of the bridge.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getCString:maxLength:range:remainingRange:</span></tt> and <tt class="literal"><span class="pre">getCString:maxLength:</span></tt></p>
+<p>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
+bridge.</p>
+</li>
+<li><p class="first"><tt class="literal"><span class="pre">getCString:</span></tt></p>
+<p>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>
+liften in a future version of the bridge.</p>
+</li>
 </ul>
 </div>
+<div class="section" id="class-nsthread">
+<h2><a class="toc-backref" href="#id37" name="class-nsthread">class <tt class="literal"><span class="pre">NSThread</span></tt></a></h2>
+<p>When you're using Python 2.3 or later it is save to call from Objective-C to
+Python on any thread. Otherwise you must be sure that the current thread has
+acquired the GIL. This means you shouldn't use API's that will call back on
+an arbitrary thread unless you're using Python 2.3 or later. It is safe to 
+start new threads using the Python threading API and run non-Cocoa code on 
+those threads, PyObjC contains code that acquires the GIL whenever the runloop
+in the main thread runs.</p>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">detachNewThreadSelector:toTarget:withObject:</span></tt></p>
+<p>This method can safely be used when using Python 2.3 or later, on earlier
+releases this will crash the interpreter.</p>
+<p>Make sure that you've either created a thread from Python using the 
+<tt class="literal"><span class="pre">thread</span></tt> or <tt class="literal"><span class="pre">threading</span></tt> module, or called <tt class="literal"><span class="pre">objc.enableThreading</span></tt> before
+using this API. This is necessary to enable threading in the Python 
+interpreter. We don't do this by default because this has a negative 
+performance impact.</p>
+</li>
+</ul>
+</div>
 </div>
 <div class="section" id="interfacebuilder-framework">
-<h1><a class="toc-backref" href="#id33" name="interfacebuilder-framework">InterfaceBuilder framework</a></h1>
+<h1><a class="toc-backref" href="#id38" 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>
+<h2><a class="toc-backref" href="#id39" 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>
+<h2><a class="toc-backref" href="#id40" name="id1">Class <tt class="literal"><span class="pre">NSView</span></tt></a></h2>
+<ul>
+<li><p class="first"><tt class="literal"><span class="pre">objectAtPoint:rect:</span></tt></p>
+<p>Defined in a catagory on <tt class="literal"><span class="pre">NSView</span></tt>.</p>
+</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>
+<h2><a class="toc-backref" href="#id41" 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>
+<h2><a class="toc-backref" href="#id42" 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>
+<h2><a class="toc-backref" href="#id43" 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>
+<h2><a class="toc-backref" href="#id44" 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>
+<h1><a class="toc-backref" href="#id45" 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>
+<h1><a class="toc-backref" href="#id46" 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>
+<h2><a class="toc-backref" href="#id47" 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>
+<h2><a class="toc-backref" href="#id48" name="class-screensaverview">Class <tt class="literal"><span class="pre">ScreenSaverView</span></tt></a></h2>
 <p>This class is fully supported.</p>
 </div>
 </div>

File pyobjc-web/docroot/doc/architecture.php

 <?
     $title = "PyObjC Architecture";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>

File pyobjc-web/docroot/doc/c-api.php

 <?
     $title = "Documentation for the PyObjC C-API (Preliminary)";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:35:32 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>
 int PyObjC_PythonToObjC(const char* typespec, PyObject* value, void* buffer);
 </pre>
 <p>Convert the value to an Objective-C value of type <tt class="literal"><span class="pre">typespec</span></tt>. The buffer must
-be at least <tt class="literal"><span class="pre">PyObjC_SizeOfType(typespec)</span></tt> bytes long.</p>
+be at least <tt class="literal"><span class="pre">PyObjCRT_SizeOfType(typespec)</span></tt> bytes long.</p>
 <p>NOTE: The <tt class="literal"><span class="pre">typespec</span></tt> is a type specifier as described in the runtime 
 reference of the Objective-C manual from Apple. Use <tt class="literal"><span class="pre">&#64;encode(mytype)</span></tt> if to
 get code that is portable to a different Objective-C runtime.</p>
 <tt class="literal"><span class="pre">NULL</span></tt> it is used to output whether this method should return a new reference
 (TRUE) or a borrowed reference (FALSE).</p>
 <pre class="literal-block">
-int PyObjC_SizeOfType(const char* typespec);
+int PyObjCRT_SizeOfType(const char* typespec);
 </pre>
 <p>Return the size of variables of the specified type.</p>
 <pre class="literal-block">
+int PyObjCRT_AlignOfType(const char* typespec);
+</pre>
+<p>Return the alignment of variables of the specified type.</p>
+<pre class="literal-block">
 Class PyObjCSelector_GetClass(PyObject* sel);
 </pre>
 <p>Return the class containing the definition of <tt class="literal"><span class="pre">sel</span></tt>.</p>

File pyobjc-web/docroot/doc/classes.php

 <?
     $title = "Python classes and Objective-C code";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>

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

 <?
     $title = "Coding style for PyObjC";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>
 <h1><a class="toc-backref" href="#id1" name="introduction">Introduction</a></h1>
 <p>This document describes the coding style for PyObjC. Please use this style for
 new code and try apply this style to existing code while working on it.</p>
+<p>The managment summary: 4-space indents in Python code, 1-TAB indents in C
+code.</p>
 </div>
 <div class="section" id="python-code">
 <h1><a class="toc-backref" href="#id2" name="python-code">Python code</a></h1>
 </div>
 <div class="section" id="c-code">
 <h1><a class="toc-backref" href="#id3" name="c-code">C code</a></h1>
-<p>The coding style for core Python is used (see <a class="reference" href="http://www.python.org/peps/pep-0007.txt">PEP 7</a>). We use <tt class="literal"><span class="pre">PyObjC</span></tt> instead
-of <tt class="literal"><span class="pre">Py</span></tt> as the prefix for globally visible symbols.</p>
+<p>The coding style for core Python is used (see <a class="reference" href="http://www.python.org/peps/pep-0007.txt">PEP 7</a>). We use <tt class="literal"><span class="pre">PyObjC</span></tt> 
+instead of <tt class="literal"><span class="pre">Py</span></tt> as the prefix for globally visible symbols.</p>
+<p>All (Objective-)C files in <tt class="literal"><span class="pre">Modules/objc/</span></tt> should include <tt class="literal"><span class="pre">&quot;pyobjc.h&quot;</span></tt> as
+their first include. The (Objective-)C files in the wrappers for frameworks
+should include <tt class="literal"><span class="pre">&quot;pyobjc-api.h&quot;</span></tt> and should not use other include-files in
+<tt class="literal"><span class="pre">Modules/objc</span></tt> other than <tt class="literal"><span class="pre">pyobjc-api.h</span></tt> and <tt class="literal"><span class="pre">wrapper-const-table.h</span></tt>.</p>
 </div>
 <div class="section" id="documentation">
 <h1><a class="toc-backref" href="#id4" name="documentation">Documentation</a></h1>

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/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>

File pyobjc-web/docroot/doc/gnustep.php

+<?
+    $title = "GNUstep support in PyObjC";
+    $cvs_author = '$Author: ronaldoussoren $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
+
+    include "header.inc";
+?>
+<div class="document" id="gnustep-support-in-pyobjc">
+<h1 class="title">GNUstep support in PyObjC</h1>
+<p>PyObjC has limited support for GNUstep, the 'objc' and 'Foundation' packages
+build and pass some, but by far not all, unittests. More work is needed to
+make the GNUstep port as stable as the MacOS X &quot;port&quot;.</p>
+<p>The GNUstep port was primarily developed on Linux i86 (specifically 
+the Debian testing distribution), using python 2.3.2,  gcc 3.3.2 and 
+gnustep-base 1.7.3-1. The code in setup.py works for this configuration,
+but probably not for other configurations.</p>
+<div class="section" id="todo">
+<h1><a name="todo">TODO</a></h1>
+<ul class="simple">
+<li>Fix bugs found using the unittests</li>
+<li>Port the AppKit wrappers</li>
+<li>Extract more CFLAGS and LDFLAGS information from the GNUstep build system,
+instead of hard-coding the information</li>
+</ul>
+</div>
+</div>
+<?
+    include "footer.inc";
+?>

File pyobjc-web/docroot/doc/install.php

 <?
     $title = "Installation Instructions";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>

File pyobjc-web/docroot/doc/intro.php

 <?
     $title = "An introduction to PyObjC";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
     include "header.inc";
 ?>
 <li><a class="reference" href="#cocoa-for-python-programmers" id="id10" name="id10">Cocoa for Python programmers</a></li>
 <li><a class="reference" href="#notes-on-specific-tasks" id="id11" name="id11">Notes on specific tasks</a><ul>
 <li><a class="reference" href="#working-with-threads" id="id12" name="id12">Working with threads</a></li>
+<li><a class="reference" href="#finalizers" id="id13" name="id13">Finalizers</a></li>
 </ul>
 </li>
-<li><a class="reference" href="#building-applications" id="id13" name="id13">Building applications</a><ul>
-<li><a class="reference" href="#pure-python-buildapp-py" id="id14" name="id14">&quot;Pure Python&quot; :  buildapp.py</a></li>
-<li><a class="reference" href="#ide-approach-project-builder" id="id15" name="id15">&quot;IDE approach&quot; : Project builder</a></li>
+<li><a class="reference" href="#building-applications" id="id14" name="id14">Building applications</a><ul>
+<li><a class="reference" href="#pure-python-buildapp-py" id="id15" name="id15">&quot;Pure Python&quot; :  buildapp.py</a></li>
+<li><a class="reference" href="#ide-approach-project-builder" id="id16" name="id16">&quot;IDE approach&quot; : Project builder</a></li>
 </ul>
 </li>
 </ul>
 <li>Concatenate all elements of the method name: <tt class="literal"><span class="pre">someMethod:withFoo:andBar:</span></tt></li>
 <li>Then convert all colons to underscores: <tt class="literal"><span class="pre">someMethod_withFoo_andBar_</span></tt></li>
 </ul>
+<p>It is possible to use Python keywords as method names in Objective-C. To access
+or define such methods append two underscores to its name (e.g. <tt class="literal"><span class="pre">class__</span></tt>). 
+This is currently only supported for <tt class="literal"><span class="pre">raise</span></tt> and <tt class="literal"><span class="pre">class</span></tt> because those are
+the only Python keywords that are actually used in Cocoa.</p>
 <p>Wrapped/bridged methods (and functions) have the same number of arguments
 as the corresponding Objective-C method or function, unless otherwise noted
 in the documentation (<a class="reference" href="api-notes-macosx.html">Notes on supported APIs and classes on MacOS X</a> for
 <pre class="literal-block">
 rowCount, columnCount = matrix.getNumberOfRows_columns_()
 </pre>
+<p>When a function or method has an array of values and the length of that array
+as arguments, you can pass <tt class="literal"><span class="pre">None</span></tt> as the length. The length of the sequence
+that is used for the array of values is passed to Objective-C as the length
+argument.</p>
+<p>XXX: Add information about <tt class="literal"><span class="pre">array.array</span></tt> rules.</p>
+<p>XXX: We don't use the right functions for conversion to C-arrays throughout
+the bridge (yet), the information is therefore not entirely correct.</p>
 <p>When you define methods in a subclass of an Objective-C class, the bridge has
 to tell the Objective-C runtime what the signature of those methods is. The
 basic rule is that all arguments as well as the return value are objects (just
 to use <tt class="literal"><span class="pre">NSThread</span></tt> to create new threads).  This restriction will be lifted
 in a future version of PyObjC (at least when using Python 2.3).</p>
 </div>
+<div class="section" id="finalizers">
+<h2><a class="toc-backref" href="#id13" name="finalizers">Finalizers</a></h2>
+<p>In Python you can use the method <tt class="literal"><span class="pre">__del__</span></tt> to clean up resources when your
+object is garbage collected. In Objective-C/Cocoa this is done with a method 
+named <tt class="literal"><span class="pre">dealloc</span></tt>.</p>
+<p>In PyObjC you should always use the <tt class="literal"><span class="pre">__del__</span></tt> method, the <tt class="literal"><span class="pre">dealloc</span></tt> method
+can safely be ignored and the bridge will complain when you try to override
+this method.</p>
+</div>
 </div>
 <div class="section" id="building-applications">
-<h1><a class="toc-backref" href="#id13" name="building-applications">Building applications</a></h1>
+<h1><a class="toc-backref" href="#id14" 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="#id14" name="pure-python-buildapp-py">&quot;Pure Python&quot; :  buildapp.py</a></h2>
+<h2><a class="toc-backref" href="#id15" 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>
 example <tt class="literal"><span class="pre">buildapp.py</span></tt> scripts in the various <a class="reference" href="../Examples/00ReadMe.txt">Examples</a> subfolders.</p>
 </div>
 <div class="section" id="ide-approach-project-builder">
-<h2><a class="toc-backref" href="#id15" name="ide-approach-project-builder">&quot;IDE approach&quot; : Project builder</a></h2>
+<h2><a class="toc-backref" href="#id16" name="ide-approach-project-builder">&quot;IDE approach&quot; : Project builder</a></h2>
 <p>PyObjC includes a number of Project Builder templates that can be used to 
 build (standalone) applications. Those templates are used like any other
 Project Builder template. The only non-obvious detail is that you have to

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

 <?
     $title = "Project Builder Python Support";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:02 $';
 
     include "header.inc";
 ?>

File pyobjc-web/docroot/doc/pyobjctools.php

 <?
     $title = "PyObjCTools: The PyObjC Toolbox";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:35:32 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:02 $';
 
     include "header.inc";
 ?>
 <li>the return value of <tt class="literal"><span class="pre">object.getKey()</span></tt></li>
 <li>the return value of <tt class="literal"><span class="pre">object._get_key()</span></tt></li>
 <li>the return value of <tt class="literal"><span class="pre">object._getKey()</span></tt></li>
-<li>the value of the attribute <tt class="literal"><span class="pre">key</span></tt></li>
-<li>the value of the attribue <tt class="literal"><span class="pre">_key</span></tt></li>
+<li>the value of the attribute <tt class="literal"><span class="pre">key</span></tt>, or the value of <tt class="literal"><span class="pre">object.key()</span></tt> if
+<tt class="literal"><span class="pre">object.key</span></tt> is a method.</li>
+<li>the value of the attribue <tt class="literal"><span class="pre">_key</span></tt>, or the vale of <tt class="literal"><span class="pre">object._key()</span></tt> if
+<tt class="literal"><span class="pre">object._key</span></tt> is a method.</li>
 </ul>
 </li>
 <li><p class="first"><tt class="literal"><span class="pre">getKeyPath(object,</span> <span class="pre">keypath)</span> <span class="pre">-&gt;</span> <span class="pre">value</span></tt></p>

File pyobjc-web/docroot/doc/release-process.php

 <?
     $title = "The PyObjC release process";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:35:32 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:02 $';
 
     include "header.inc";
 ?>

File pyobjc-web/docroot/doc/structure.php

 <?
     $title = "Structure of the PyObjC package";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:02 $';
 
     include "header.inc";
 ?>

File pyobjc-web/docroot/doc/tutorial.php

 <?
     $title = "Creating your first PyObjC application.";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:02 $';
 
     include "header.inc";
 ?>
 <pre class="literal-block">
 $ export PYLIB=/Library/Frameworks/Python.framework/Versions/Current/lib/python2.3
 </pre>
-<p>For Apple's <tt class="literal"><span class="pre">/usr/bin/python</span></tt> set the variable to <tt class="literal"><span class="pre">/usr/lib/python2.2</span></tt>.</p>
+<p>For Apple's <tt class="literal"><span class="pre">/usr/bin/python</span></tt> set the variable to <tt class="literal"><span class="pre">/usr/lib/python2.2</span></tt>,
+if you are running on MacOS X set it to <tt class="literal"><span class="pre">/System/Library/Frameworks/Python.framework/Versions/Current/lib/python2.3</span></tt>.</p>
 </li>
 <li><p class="first">Start Interface Builder, select <em>Cocoa Application</em>
 in the new file dialog, save this file as <tt class="literal"><span class="pre">src/MainMenu.nib</span></tt>.</p>
 <h1><a name="testing-the-user-interface">Testing the user interface</a></h1>
 <ol class="arabic" start="6">
 <li><p class="first">Now we need to create an application framework around our program. Again,
-in the future it could well be that this step is not needed during development,
-or that it becomes simpler, but for now we do the following:</p>
+in the future it could well be that this step is not needed during 
+development, or that it becomes simpler, but for now we do the following:</p>
 <pre class="literal-block">
 $ python $PYLIB/site-packages/PyObjC/bundlebuilder.py --link --nib=MainMenu \
         --mainprogram=CurrencyConverter.py --resource=MainMenu.nib build
 </pre>
+<p>If you are using Python 2.3 the script is located in <tt class="literal"><span class="pre">plat-mac</span></tt> instead
+of <tt class="literal"><span class="pre">site-packages</span></tt> and the command is:</p>
+<pre class="literal-block">
+$ python2.3 $PYLIB/plat-mac/bundlebuilder.py --link --nib=MainMenu \
+        --mainprogram=CurrencyConverter.py --resource=MainMenu.nib build
+</pre>
 <p>There are a few things to note:</p>
 <ul class="simple">
 <li>We use the <tt class="literal"><span class="pre">--link</span></tt> argument. This creates a <tt class="literal"><span class="pre">.app</span></tt> bundle which has symlinks

File pyobjc-web/docroot/doc/tutorial_reading.php

 <?
     $title = "Understanding existing PyObjC examples";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:02 $';
 
     include "header.inc";
 ?>

File pyobjc-web/docroot/doc/wrapping.php

 <?
     $title = "How to wrap an Objective-C class library";
     $cvs_author = '$Author: ronaldoussoren $';
-    $cvs_date = '$Date: 2003/10/08 17:30:40 $';
+    $cvs_date = '$Date: 2004/02/02 15:23:02 $';
 
     include "header.inc";
 ?>
    bundle_path='/path/to/MyFramework.framework')
 del objc
 </pre>
+<p>In general you should not load frameworks this way, but you should write a
+package or module to do this for you (e.g. place this code in <tt class="literal"><span class="pre">MyFramework.py</span></tt>
+or <tt class="literal"><span class="pre">MyFramework/__init__.py</span></tt>. This makes it possible to 
+<tt class="literal"><span class="pre">import</span> <span class="pre">MyFramework</span></tt> which is much more convenient.</p>
 <p>If your class library does not require helper functions for some methods this
 is all that is needed.</p>
-<p>Don't forget to import the frameworks that are used by your framework before
-calling <tt class="literal"><span class="pre">objc.loadBundle</span></tt>. This is necessary to arrange for the helper code
-for these modules (if there is any) to be loaded. Not importing the those
-wrappers can lead to subtle bugs in unrelated code!</p>
+<p>It is currently necessary to import the wrapper modules for all frameworks that
+are used by your framework. Not doing this may lead to subtle bugs in other
+parts of the code. This is a limitation of PyObjC that will be 
+lifted in a future version.</p>
 </div>
 <div class="section" id="wrapping-global-functions-and-constants">
 <h1><a name="wrapping-global-functions-and-constants">Wrapping global functions and constants</a></h1>

File pyobjc-web/docroot/footer.inc

 <?
-/* $Id: footer.inc,v 1.2 2003/05/04 12:56:38 ronaldoussoren Exp $ */
+/* $Id: footer.inc,v 1.3 2004/02/02 15:23:01 ronaldoussoren Exp $ */
 ?>
 
 </td></tr>
 <td bgcolor="#eeeeee" align="center" width="120"
     style="background-image:url(<? print $root ?>img/stripes.gif)">
   <a href="<? print $root ?>legal.php" style="text-decoration:none;color:black;font-size:10pt;">
-    Copyright&nbsp;&copy;&nbsp;2003 The&nbsp;PyObjC&nbsp;Project
+    Copyright&nbsp;&copy;&nbsp;2003, 2004 The&nbsp;PyObjC&nbsp;Project
   </a>
 </td>
 <td class="layout">

File pyobjc-web/docroot/header.inc

 <?
-/* $Id: header.inc,v 1.6 2003/10/08 17:30:40 ronaldoussoren Exp $ */
+/* $Id: header.inc,v 1.7 2004/02/02 15:23:01 ronaldoussoren Exp $ */
 
 // section navigation (always visible)
 $sections = array(
   "faq/index.php", "FAQ", "faq",
   "software/", "Download", "download",
   "examples/index.php", "Examples", "examples",
-  "showcase/index.php", "PyObjC Users", "pyobjc-users",
+//  "showcase/index.php", "PyObjC Users", "pyobjc-users",
   "http://sourceforge.net/mail/?group_id=14534", "Mailing Lists", "mailing-lists"
 );
 if (!$section)

File pyobjc-web/docroot/index.php

 <?
 $title = "Home";
 $cvs_author = '$Author: ronaldoussoren $';
-$cvs_date = '$Date: 2003/10/09 05:51:09 $';
+$cvs_date = '$Date: 2004/02/02 15:23:01 $';
 $is_home = 1;
 
 $metatags = '<meta name="description" content="PyObjC, a universal bridge between the Objective-C and Python languages.">
 current version has minimal support for MacOS X 10.1, earlier versions are not 
 (and will never be) supported.
 <p>
-We want to offer the same level support for 
-<a href="http://www.gnustep.org/">GNUstep</a>, but need volunteers with GnuStep
-experience to make that happen. Contact <a href="mailto:pyobjc-dev@lists.sourceforge.net">the mailinglist</a> if you want to help out.
+There is limited support for <a href="http://www.gnustep.org/">GNUstep</a>, 
+most of the unittests pass on GNUstep on Linux/ix86. However, we do not yet
+support the AppKit framework on GNUstep.
+<P>
+Contact <a href="mailto:pyobjc-dev@lists.sourceforge.net">the mailinglist</a> if you want to help out.
 
 <h1>Resources</h1>
 

File pyobjc-web/docroot/links.php

 <?
 $title = "Links";
 $cvs_author = '$Author: ronaldoussoren $';
-$cvs_date = '$Date: 2003/10/08 17:30:40 $';
+$cvs_date = '$Date: 2004/02/02 15:23:01 $';
 
 include "header.inc";
 ?>
 
 <p>All links will open in a new browser window.</p>
 
+<h2>Python on the Mac</h2>
+<ul>
+<li><a href="http://homepages.cwi.nl/~jack/macpython/" target="_blank">MacPython</a> - the official home for Python on the Mac.
+<li><a href="http://pythonmac.org/" target="_blank">pythonmac.org</a> - Mac OS X Python Resources
+</ul>
+
 <h2>The building blocks</h2>
 <ul>
 <li><a href="http://www.python.org/" target="_blank">Python</a> - the Python interpreter</li>
 <h2>Similar Projects</h2>
 <ul>
 <li><a href="http://camelbones.sourceforge.net/" target="_blank">CamelBones</a> - a Perl&lt;-&gt;ObjC bridge</li>
-<li><a href="http://archive.develooper.com/macosx@perl.org/msg00896.html" target="_blank">PerlObjCBridge</a> - another Perl&lt;-&gt;ObjC bridge. Ships with OS X (see <i>PerlObjCBridge</i> man page)</li>
+<li><a href="http://archive.developer.com/macosx@perl.org/msg00896.html" target="_blank">PerlObjCBridge</a> - another Perl&lt;-&gt;ObjC bridge. Ships with OS X (see <i>PerlObjCBridge</i> man page)</li>
 <li><a href="http://www.fscript.org/" target="_blank">F-Script</a> - a lightweight object-oriented scripting layer designed for OS X</li>
 <li>And many more.... the F-Script folks have put together an <a href="http://www.fscript.org/links.htm">an excellent collection</a> of links!</li
 </ul>

File pyobjc-web/docroot/news/news.inc

+<?
+  $macpython23="<a href=\"http://homepages.cwi.nl/~jack/macpython/\">Mac Python 2.3</a>";
+?>
+<span class="news_date">2004-02-02: </span><span class="news_headline">PyObjC 1.1a0 released</span><?php gray_line(); ?>
+  <p>
+A prerelease of the upcoming 1.1 release of PyObjC is available. This version 
+contains numereous improvements, especially when you're using PyObjC on Panther.
+See the <a href="<? print $root; ?>NEWS-1.1.txt">NEWS file</a> for details.
+  <p>
+There currently is no binary installer for Mac OS X 10.2, that will be made
+available with the next release.
+  <p>
+The <a href="<? print $root; ?>prerelease/pyobjc-1.1a0.tar.gz">source archive</a>, <a href="<? print $root; ?>prerelease/pyobjc-1.1a0-Panther.dmg">binary installer for Mac OS X 10.3</a>, and the <a href="<? print $root; ?>packman/pyobjc-unstable-7.0-Power_Macintosh.plist">packman database for Mac OS X 10.3</a> are available.
+  <p>
+
 <span class="news_date">2003-10-08: </span><span class="news_headline">PyObjC 1.0 released</span><?php gray_line(); ?>
   <p>
 We're happy to announce the release of PyObjC 1.0. This version fixes the bugs 
 found in the last beta and adds support for Key-Value Coding, see the 
 <a href="<? print $root; ?>NEWS-1.0.txt">NEWS file</a> for details.
   <p>
-A disk image and the sources are <a href="http://sourceforge.net/project/showfiles.php?group_id=14534">available</a>.  Users of MacPython 2.3 can install 
+A disk image and the sources are <a href="http://sourceforge.net/project/showfiles.php?group_id=14534">available</a>.  Users of <? print $macpython23 ?> can install 
 PyObjC using the Package Manager.
   <p>
 <span class="news_date">2003-07-05: </span><span class="news_headline">PyObjC 1.0b1 released</span><?php gray_line(); ?>
  <p>
  The PyObjC installer package installs the Python packages for use with the 
  Apple provided Python 2.2 on MacOS X 10.2 as well as a number of project
- builder templates.  Users of <a href="http://homepages.cwi.nl/~jack/macpython.html#beta">MacPython 2.3</a> can install this release using the 
+ builder templates.  Users of <? print $macpython23 ?> can install this release using the 
  PackageManager application.
 
 <p><span class="news_date">2003-07-05: </span><span class="news_headline">CVS snapshots</span><?php gray_line(); ?>

File pyobjc-web/docroot/packman/pyobjc-unstable-7.0-Power_Macintosh.plist

+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>Description</key>
+	<string>Experimental Package Manager Database for PyObjC</string>
+	<key>Maintainer</key>
+	<string>oussoren@cistron.nl</string>
+	<key>Version</key>
+	<string>0.3</string>
+	<key>Packages</key>
+	<array>
+		<dict>
+			<key>Description</key>
+			<string>
+Python &lt;-&gt; Objective-C bridge (Cocoa for Python).
+
+PyObjC allows full interaction between Python and Objective-C objects,