source files: [xc]03d.[ch]
(SEND <x03d> :GET <:PROPERTY> [<default-value>]) (SEND <x03d> :SET <:PROPERTY> <value>) (SEND <x03d> :REMPROP <:PROPERTY>) (SEND <x03d> :PROPERTY-LIST-LENGTH) (SEND <x03d> :PROPERTY-LIST-NTH <fix:index> [<default-value>])
:GET/:SET are used to fetch/store propertylist values passively stored for the benefit of the user. A given property is present at most once on the propertylist: :SET of a prexisting property changes it's value rather than adding a second entry. (A property may, of course, have a list as it's value, so this is not much of a restriction logically.)
If :GET does not find the requested property, it returns <default-value> if one was provided, otherwise signals an error.
:REMPROP removes the given property from the propertylist, returning (:PROPERTY . <val>) if the property was successfully removed, else NIL.
:PROPERTY-LIST-LENGTH and :PROPERTY-LIST-NTH are provided to allow iteration through all properties on object, the latter's <default-value> works just as on :GET. :PROPERTY-LIST-NTH takes indices from zero to one less than the return value of :PROPERTY-LIST-LENGTH.